Python初识函数

1,自定义函数说明文档

  • 方法:

    1
    2
    3
    4
    5
    def 函数名(参数):
    """ 说明文档的位置 """
    eg: :param a :参数 str
    :param b :参数 int
    :return: None
  • 书写函数说明文档是一个很好的代码习惯,在函数名后面写三对双引号并回车则会出现param等自动生成的参数格式,这时可以在冒号后面说明函数的参数的类型,以及函数的返回值类型。

2,函数的形参和实参

  • 定义时小括号中的参数,用来接收参数用的,称为 “形参”

  • 调用时小括号中的参数,用来传递给函数用的,称为 “实参”

3,函数的嵌套

1
2
3
4
5
6
7
8
def function1(num1, num2):
return num1+num2

def function2(a,b):
ret = function1(a,b)
my_avg = ret/2
return my_avg
print(function2(100, 200))

4,局部变量和全局变量

  • 局部变量和全局变量的作用域不同

  • 在函数内部会优先使用局部变量,再使用全局变量

  • 局部变量和全局变量的生存周期不同:局部变量随函数调用完成或循环完成就被销毁,而全局变量的生命周期则为整个程序的生命周期

    — 代码举例

    1
    2
    3
    4
    5
    6
    7
    8
    def function1(num1, num2):
    return num1+num2

    def function2(a,b):
    ret = function1(a,b)
    my_avg = ret/2
    return my_avg
    print(function2(100, 200))

5,交换变量常用的方法

  • 1,所有语言通用,若a,b交换则定义一个临时变量c

    1
    2
    3
    4
    5
    6
    a = 100
    b = 200
    c = 0
    c = a
    a = b
    b = c
  • 2,加减法,加加减减

    1
    2
    3
    4
    5
    6
    a = 100
    b = 200
    a = a + b
    b = a - b
    a = a - b
    print(a,b)
  • 3,Python特有

    1
    2
    3
    4
    a = 100
    b = 200
    a,b = b, a
    print(a,b)

6,参数的不同类型

1
2
3
4
5
def usr_info(name, age='未知', gender='未知'):		#缺省参数,在传参的时候可以省略age和gender也不会报错
#但是注意普通的参数一定卸载最前面
print(f'名字是{name},年龄是{age},性别是{gender}')

usr_info()
1
2
3
4
5
def usr_info(name, age, gender):
print(f'名字是{name},年龄是{age},性别是{gender}')

usr_info('老王', age=18, gender='女') #注意应该将普通参数放在键值对参数的前面
usr_info(name='老李', gender='男', age=12)
1
2
3
4
5
def usr_info(name, age, gender ,*args, **kwargs):
print(f'名字是{name},年龄是{age},性别是{gender}')
print(args) #args负责将多余的普通参数以元组的形式存储起来
print(kwargs) #kwargs负责将多余的键值对以字典的形式存储起来
usr_info(1,2,3,4,5,sex='女',height='187cm') #注意应该将普通参数放在键值对参数的前面
  • *不定长参数 作用(参数传多了的问题) *args将多余的参数以元组的形式存储起来 *kwargs用于存储多余的键值对

7,函数作为参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 函数作为一个参数,函数名存储的是函数内存空间的地址
def application(func): #先调用application再将func==my_add
a = 100
b = 200
sum = func(a, b) #执行到此句开始调用my_add函数
print(sum)


def my_add(num1, num2): #将a,b实参传递并计算结果返回
ret = num1 + num2
return ret


application(my_add) # 将函数作为一个参数传递给application,

8,匿名函数

1
2
3
4
5
6
7
8
def application(func):
a = 100
b = 200
ret = func(a, b)
print(ret)


application(lambda a, b: a + b) #lambda a, b: a + b等价于上一段代码的my_add函数。冒号后面的相当于是返回值

9,闭包(装饰器的前置)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def func_out(func):     #第二步
def func_in():
print('验证')
func() #此时func() == log_in()

return func_in #第三步


def log_in():
print("登陆")


log_in= func_out(log_in) # 第一步调用函数func_out并将log_in函数作为参数传递
log_in() #第四步,log_in == func_in故log_in()== func_in(),先打印验证后打印登陆

10,装饰器

  • 装饰器的作用是在不修改原函数的代码逻辑的情况下,实现对代码功能的添加。使其获得验证功能。当源代码登录功能写的非常多,达到了牵一发动全身的时候就不要再源代码登录逻辑中添加代码了,这时候可以通过装饰器来实现对原功能的扩充。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
def func_out(func):     
def func_in():
print('验证')
func() #此时func() == log_in()

return func_in


@func_out #装饰器——等加于log_in= func_out(log_in)
def log_in():
print("登陆")


log_in()