函数
函数
函数是对功能的封装
语法:
def 函数名(形参列表):
函数体(代码块,return)
调用
函数名(实参列表)
返回值
1.return:在函数执行的时候,如果遇到return.直接返回
2.如果函数什么都不写,不写return.得到的是None.
3.在函数中写return 值.返回一个值.
4.在函数中可以返回多个返回值,return 值1, 值2, 值3......, 接收的是元组.
参数
函数执行的时候给函数传递消息.
*形参:函数声明的位置的变量
*实参:函数调用的时候给的具体的值
传参:把实参交给形参的过程
#单行注释
'''多行注释'''
# 函数注释
def func(a, b):
"""
这个函数是用来计算a和b的和
:param a: 第一个数据
:param b: 第二个数据
:return: 返回的是两个数的和
"""
return a + b
print(func.__doc__) # document文档
1.实参:
1.位置参数,按照形参的参数位置,给形参传值
2.关键字参数,按照形参的名字给形参传值
3.混合参数.即用位置参数,也用关键参数
2.形参:
1.位置参数,按照形参的参数位置,给形参传值
2.默认值参数 先位置后默认值
3.动态传参
1).*args 位置参数动态传参
def chi(*li):
print(li)
chi('米饭', '面条', '粥')
chi('馒头', '盖浇饭')
chi('馒头') #返回的是一个元组
输出结果:
('米饭', '面条', '粥')
('馒头', '盖浇饭')
('馒头',)
2).**kwargs 关键字参数动态传参
def chi1(**food):
print(food)
chi1(good_food = '米饭', drink = '可乐') #返回的是一个字典
输出结果:
{'good_food': '米饭', 'drink': '可乐'}
位置参数动态传参和关键字参数动态传参一起使用的顺序:
顺序: 位置, *args, 默认值, **kwargs
def fun(a, *args, c="哈哈", **kwargs):
print(a, args, c, kwargs)
fun(1, 2, 3, 4,5, 6)
输出结果:
1 (2, 3, 4, 5, 6) 哈哈 {}
def func(*args, **kwargs): #无敌传参
pass
聚合:形参的位置*,**:聚合 聚合:把接收到的参数组合成一个元组
打散: 实参的位置*,**: 打散 打散:把序列按顺序打散
字典的打散和聚合需要两个**
def fun(*args):
print(args)
lst = [1, 4, 7]
fun(lst) #直接输入列表,列表整体作为一个参数传入函数
fun(lst[0], lst[1], lst[2]) #输入列表的每一个元素,需要索引输入
fun(*lst) # 可以使用*把一个列表按顺序打散
s = "臣妾做不到"
fun(*s) # 字符串串也可以打散, (可迭代对象)
输出结果:
([1, 4, 7],)
(1, 4, 7)
(1, 4, 7)
('臣', '妾', '做', '不', '到')
def fun(*args, **kwargs): #聚合
print(args)
print(kwargs)
list1 = [1, 2, 3, 4]
tuple1 = (1, 2, 3, 4)
list2 = ['alex', 'wusir', 1]
dic = {'name': 'alex', 'age': 18}
fun(*list1, *tuple1, *list2, **dic) #打散
输出结果:
(1, 2, 3, 4, 1, 2, 3, 4, 'alex', 'wusir', 1)
{'name': 'alex', 'age': 18}
命名空间:
1.内置名称空间
2.全局名称空间
3.局部名称空间
作用域:
1.全局作用域:内置名称空间+全局名称空间
2.局部作用域: 局部(函数被调用)
globals() 查看全局中的内容
locals() 查看当前作用域中的内容
a = 110 # 全局
def fn(): #全局
b = 20 # 局部
def gn(): # 局部
print(globals()) # 可以查看全局作用域中的内容
print(locals()) # 查看当前作用域中的内容
gn()
fn()
输出结果:
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0327DF50>,
'__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>,
'__file__': 'C:/Users/Desktop/python.py', '__cached__': None, 'a': 110, 'fn': <function fn at 0x032507C8>}
{}
函数嵌套:函数可以互相嵌套
global :在局部访问全局中的内容
def func():
global a # 1. 可以把全局中的内容引入到函数内部 , 2. 如果全局中没有这个内容,就在全局创建一个变量
a = 20 #将20赋值给a,这个a是全局中的a,此时全局中的a为20
a += 10 # a = a+10 此时a=30
print(a) #a=30
func()
print(a)
输出结果:
30
30
nonlocal:在局部寻找外层函数中离它最近的那个变量
a = 10
def outer():
a = 1
def inner(): # 在inner中改变a的值
nonlocal a # 寻找外层函数中离他最近的那个变量
print(a) #在outer()函数中找到a,此时a=1
a = 20 #将20赋值给a
print(a) #此时a=20
inner()
outer()
输出结果:
1
20
a = 1
def fun_1():
a = 2
def fun_2():
nonlocal a
a = 3
def fun_3():
a = 4
print(a)
print(a)
fun_3()
print(a)
print(a)
fun_2()
print(a)
print(a)
fun_1()
print(a)
输出结果:
1
2
3
4
3
3
1

浙公网安备 33010602011771号