小识函数

语法:
def + 函数名():
   函数体/代码块
调用:函数名()
return 不写返回None,写了不写值返回None,多个返回值显示的是元组
return 返回的内容不受限制  谁调的,返回谁
return 以下代码不执行,终止函数
eg:
1 def yue(name,name1):  # 括号内的是形参
2     print('乔狗去约了一条小母狗')
3     print('俩人开了一个房间')
4     print('一晚上没出来')
5     return '惨不忍睹啊'
6 print(yue())
参数:
定义的参数是  形参
调用的参数是  实参        # 形参和实参的数量要一致
从实参到形参的过程叫传参
被使用的形参会变色

yue('乔狗','乔二狗')             # 位置参数
yue(name='乔狗',name1='乔二狗')  # 关键字参数
yue('乔狗',name1='乔二狗')       # 混合参数

eg:
1 def func(name,age,addr,sex=''):
2     print(f'{name},{age},{addr},{sex}')
3 func('乔狗',20,'鸡西')
4 func('乔二狗',22,'哈尔滨')
5 func('乔二哈',23,'北京')
6 func('乔二拆',24,'上海')

不写其他值,sex默认为男,写了添加自己写的值。


介绍一下无敌传参:
1 def func(*args,**kwargs):  #用此方法万能传参
2     print(args)
3     print(kwargs)
4 func(1,2,3,a=4,b=5)
位置参数 > 关键字参数

  讲一下形参的位置:

位置 *args 默认值 **kwargs

1 def chi(*food):
2     print(food)
3 chi("大米饭")
4 chi("大米饭","炒鸡蛋")
5 chi("大米饭","炒鸡蛋","吃完就滚蛋")
6 chi("大米饭","炒鸡蛋","兄dei你还吃吗?")

  动态传参:

*,**:
形参:聚合
位置参数 * 得到元组
关键字** 得到字典
实参:打散
列表,字符串,元素 —>*
字典 —>**
位置参数聚合:
1 def func(a,b,*args):        # 聚合
2     print(a,b,*args)        # 打散
3 func(1,2,3,4,5,6)

 默认参数聚合:

1 def func(a=1,b=2,**kwargs):  # 默认参数 聚合
2     print(a,b,kwargs)
1 def func(a,b,*args,c=1,**kwargs):   # 位置 > 动态位置 > 默认参数 > 默认动态参数
2     print(a,b,c,args,kwargs)
1 lst=[1,2,3,4,5]
2 def func(*args):    # 聚合
3     print(*args)    # 打散
4 func(*lst)          # 打散
作用域和名称空间:
名称空间: 用来存放名字(变量, 函数名, 类名, 引入的模块名)的
1. 全局名称空间: 我们在py文件中自己写的变量, 函数.....
2. 内置名称空间: 我们python解释器提供好的一些内置内容(print, input....)
3. 局部名称空间: 在我们执行函数的时候.会产生一个局部名称空间. 放的是: 函数内部的内容(变量, 函数,类...)
名称空间可能会有无数个, 局部名称空间而言. 相对是独立的.一般互不干扰

作用域:
1. 全局作用域: 内置+全局
2. 局部作用域: 局部
globals() 查看全局作用域
locals() 查看当前作用域

函数的嵌套:
在函数中声明函数
在内部函数中使用变量的时候, 查找顺序: 先找自己 -> 上一层 -> 上一层..全局 -> 内置

nonlocal和global关键字(重点):
global: 在局部引入全局变量
nonlocal: 在局部...内层函数引入外层离他最近的那个变量.外层没有再找外层,找全局最外层局部

print(func.__doc__)        # 函数名.__doc__  查看函数的注释
 
 
 
 
 
原文地址:https://www.cnblogs.com/53Dawns/p/10239461.html