【PY从0到1】第七节 函数

# 7 第七节 函数
# 函数对于编程语言来说是一块重量级的内容。
# 他可以实现或者简化编写的代码。
# 编写好特定功能的函数后,就可以重复调用函数来完成任务。
# 下面我们就用函数的形式来封装前面学过的知识。

# 1> 简单的函数结构
def plus_plus():#<---这是函数名
    '''
    运算既定的数字加法 #<-----这是函数功能的注释
    '''
    a = 1 + 1
    return a#<-----return代表将a值赋值给plus_plus

print(plus_plus())#<-----打印plus_plus
# 输出结果如下:
# 2
# 上面讲的是函数最简单的结构

# 2> 给函数加上参数
# 我们只要稍作修改就可以使plus_plus变成一个加法器。
def plus_plus(a,b):
    '''
    一个简单的加法器
    '''
    c = a + b
    print(c)

plus_plus(2, 4)#默认a = 2,b = 4
# 输出为:6
# 又或使用这样的语句:
# plus_plus(a = 2,b = 4)
# plus_plus(b = 4,a = 2)

# 我们再定义一个新的函数
def introduce(name,age,like_foods='hamburgers'):
    '''
    一个简单的自我介绍
    '''
    a = 'My name is '
    b = 'I am '
    c = ' years old. '
    d = 'I like '
    print(
        a + 
        name.title() + 
        '. ' + 
        b + 
        str(age) + 
        c + 
        d +
        like_foods + 
        '. '
        )

introduce('kitty', 6)
# 输出结果如下:
# My name is Kitty. I am 6 years old. I like hamburgers. 
# 其中like_foods是默认为汉堡。我们一般把有默认值的参数置于末尾。
# 如果想修改默认值,只需要如下操作。
introduce('Tom', 8,like_foods='noodles')
# 输出如下:
# My name is Tom. I am 8 years old. I like noodles. 

# 3> 可选实参
def introduce(name,age,like_foods=''):#给like_foods传入空字符串
    '''
    一个简单的自我介绍
    '''
    a = 'My name is '
    b = 'I am '
    c = ' years old. '
    d = 'I like '
    if like_foods:#<----如果like_foods不为空,就执行下方,否则执行else。
        '''
        做一个判断,如果没有输入喜欢的食物就不输出相关语句。
        '''
        print(
            a + name.title() + 
            '. ' + 
            b + 
            str(age) + 
            c + 
            d + 
            like_foods + 
            '.'
            )
    else:
        print(a + 
              name.title() + 
              '. ' + 
              b + 
              str(age) + 
              c
              )

introduce('lisa', 8)
# 输出结果如下:
# My name is Lisa. I am 8 years old. 
introduce('lisa', 8,like_foods='noodles')
# 输出结果如下:
# My name is Lisa. I am 8 years old. I like noodles. 

# 4> 每个函数最好只有一个功能
# 做个签到模型
def signature_system(did_not_sign_in,already_signed_in):
    '''提示签到成功'''
    while did_not_sign_in:
        signing = did_not_sign_in.pop()
        print('\n你好,' + signing.title() + '。签到成功。')
        already_signed_in.append(signing)
        
def show_signature(already_signed_in):
    '''展示签到列表'''
    print('\n已经按时签到的员工:')
    for signature in already_signed_in:
        print('- ' + signature)
        
a = ['xixi','didi','huanhuan']
b = []
signature_system(a,b)
show_signature(b)
# 代码运行结果如下:
# 你好,Huanhuan。签到成功。

# 你好,Didi。签到成功。

# 你好,Xixi。签到成功。

# 已经按时签到的员工:
# - huanhuan
# - didi
# - xixi

# 在以后的编写中,尽量做到单个函数只实现一个具体的内容。这样可以让代码看起来通俗易懂。
        
# 小技巧:
# 用[:]做复制操作
a = ['xixi','didi','lala']
b = a[:]
print(b)
# 结果如下:
# ['xixi', 'didi', 'lala']

# 5> 设置任意数量的参数
# 用*告诉Python我们传入函数的变量是不确定数量的。
def guest(*b):
    print("\n欢迎您们的到来!")
    for a in b:
        print("- " + a)

guest('xixi','didi','huanhuan')
#运行结果如下:
# 
# 欢迎您们的到来!
# - xixi
# - didi
# - huanhuan

# 将*改为**就可以传入任意数量的字典。

# 自己编写函数时一定要遵循以下编写习惯:
# 1>给函数命名时,只是用小写字母和下划线。
# 2>函数名通俗易懂,最好以其实现的功能为名称。
# 3>每个函数都应该有注释,短注释用''' ''',长注释用下面的格式:
# '''
# xxxx
# '''
# 4>给参数指定默认值时,不要在等号的两边添加空格。
# 5>如果函数包含的参数过多,超过了一行79个字符,则要用下方的格式:
# def function_name(
#         parameter_0,parameter_1,parameter_2
#         parameter_3,parameter_4,parameter_5):
#     '''
#     xxxxx
#     '''
# 6>函数与函数之间要有两个回车分开。
# 7>至少遵循以上编写原则。