Python函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。它是对数据与代码的封装,实现了代码的复用。
一.函数的定义和调用
1.函数的定义
(2)小括号之间可以定义参数,任何传入的参数和变量必须放在小括号中间。
(3)函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
(4)函数内容以冒号起始,函数体代码块要进行缩进。
(5)return [表达式]
函数定义语法如下:
def 函数名(): "函数文档字符串" 代码块
函数定义后并不会直接执行,需要进行调用才会执行。
2.函数的调用
函数必须调用才会进行执行。调用方式如下:
函数名()
在Python中,函数需要先定义再调用。
def func1():
pass
func1() #如果写在函数定义之前,执行会报错
3.函数的参数
(1)位置参数
调用函数时,传递的参数个数和值的顺序必须与定义的形式参数的顺序对应。这称之为位置参数。调用时传入的参数个数不对会报错。
def func1(a, b): print(f'a:{a},b:{b}') func1('A', 2) #a:A,b:2 func1() #TypeError: func1() missing 2 required positional arguments: 'a' and 'b' 调用时不传参或参数个数不对则会报错
(2)关键字参数
- 关键字参数是一个在函数调用时的概念,而不是定义函数时的语法或概率。
- 关键字参数是指使用 形参=实参 的方式来传入参数。
- 关键字参数传递参数不需要与形参的位置完全一致,只要将参数名写正确即可。
def func1(name, age): print(f'姓名:{name},年龄:{age}') func1(name='sam', age=20) #姓名:sam,年龄:20 func1(age=20, name='sam') #姓名:sam,年龄:20 func1('sam', 20) #姓名:sam,年龄:20 func1(20, 'sam') #姓名:20,年龄:sam
(3)默认参数
调用函数时,默认参数如果不传入实参,则使用默认值。默认参数如果传入实参,则使用传入的实参。
def func1(name, age=18): print(f'姓名:{name},年龄:{age}') func1('sam') #姓名:sam,年龄:18 func1('sam', 20) #姓名:sam,年龄:20
(4)不定长参数
又叫可变长度参数、任意参数。如果事先不知道参数个数,就可以使用不定长参数。
不定长参数有2种:
一种是 *xx 的形式,函数定义时,在参数前加一个星号*,在传入参数时可以不用指定参数名,直接传入值即可,参数个数不固定,参数以元组的形式导入;
一种是 **xx 的形式,函数定义时,在参数前加两个星号**,在传入参数时以关键字参数的形式传入,参数个数不固定,参数以字典的形式导入。
def func1(*args): print(args) func1(1, 'a', [1, 2]) #(1, 'a', [1, 2]) func1('abc') #('abc',)
def func2(**kwargs): print(kwargs) func2(name='sam', age=18, score=81) #{'name': 'sam', 'age': 18, 'score': 81}
def func3(name, *args, **kwargs): print('name:', name) print('*args:', args) print('**kwargs', kwargs) func3('sam', 18, 'aa', score=67, gender='男') # name: sam # *args: (18, 'aa') # **kwargs {'score': 67, 'gender': '男'}
4.return语句和函数的返回值
return语句用于返回函数的处理结果或其他数据。当return被执行,函数调用也会结束(类似循环中的break)。
def num2en(num): if num in range(10): return ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'][num] else: print('仅支持数字0-9') print(num2en(2)) # two
def func1(): for i in range(10): return i # print(func1()) # 0 return语句返回i并且会结束函数的调用,因此func1()的for循环只会执行1次,返回0,然后就结束了函数调用
5.变量的作用域
变量起作用或者说生效的范围称为变量的作用域。
变量分为:局部变量 、全局变量。
局部变量
局部变量是在函数中定义的变量,只在函数内部生效。函数形参就是局部变量。
def func1(name): age = 18 # name和age都是局部变量,在函数内赋值时默认是为局部变量赋值,不会影响到函数外的变量 print(f'{name}:{age}') func1('sam') # sam:18 print(name,age) # NameError: name 'name' is not defined
全局变量
全局变量是在函数内外都能生效的变量,是在函数外定义的。
name = 'sam' def func1(): print(name) func1() #sam def func2(): name = 'tom' # 此时name在函数内部直接赋值,函数内的name是局部变量,是在函数内新声明了一个变量,与函数外的name无关 print(name) # func2() #tom print(name) #sam
要想在函数内对全局变量进行修改,需要使用 global 进行声明,表明是全局变量,示例如下:
name = 'sam' print(name) #sam def func2(): global name # 声明name为全局变量 name = 'tom' # 此时对name进行赋值就是对全局变量name进行赋值 print(name) # func2() #tom print(name) #tom
6.函数的嵌套
函数嵌套是指在函数内部又定义函数。
示例:
def func1(): print('外层函数1') def func2(): print('内层函数') print('外层函数2') func2() func1() # 外层函数1 # 外层函数2 # 内层函数
浙公网安备 33010602011771号