函数名补充
- 变量名可指向数据,函数
- 编译型语言,自定义函数前置
函数作为元素
- 函数作为对象,可被任意变量指向
指向函数对象后的变量可执行
def add_func(): return 123 a1 = [add_func,add_func()] print(a1[0],a1[1]) res = a1[0]() print(res)- 函数可被hash,可作为集合的值和字典的键
函数元素应用场景
序号选择功能 | 执行单一功能
- if…else
函数作为元素
def send_pic(): pass def send_word(): pass def send_audio(): pass def send_video(): pass #if...else.... choice_dict = { '1':send_pic, '2':send_word, '3':send_audio, '4':send_video } print('1,发送照片. 2,发送文字。 3,发送音频. 4,发送视频.') user_input_1 = input('请输入序号').strip() func_choice = choice_dict.get(user_input_1) if not func_choice: print('请重新输入') else: func_choice() #函数作为元素 print('1,发送照片. 2,发送文字。 3,发送音频. 4,发送视频.') user_input_1 = input('请输入序号').strip() if user_input_1 == '1': send_pic() elif user_input_1 == '2': send_word() elif user_input_1 == '3': send_audio() elif user_input_1 == '4': send_video()
绑定函数执行 | 执行多个功能
def send_pic(): pass def send_word(): pass def send_audio(): pass def send_video(): pass tool_func_list = [send_pic, send_word, send_audio, send_video] for item in tool_func_list: item()多次函数添加参数
添加多个参数可打包(args和* kwargs)
作为元素时,参数可使用列表或字典绑定
与列表绑定A
def send_pic(path,content): pass def send_word(come,content): pass def send_audio(path,content): pass def send_video(path,content): pass #选择函数,添加默认参数 choice_func_dict = { '1':[send_pic,['a/1.jpg','123']], '2':[send_word,['alex','bit']], '3':[send_audio,['a/1.mp3','bit']], '4':[send_video,['a/1.mp4','bit']], } print('1,发送照片. 2,发送文字。 3,发送音频. 4,发送视频.') user_input = input('输入序号').strip() func = choice_func_dict.get(user_input) func_execution = func[0] func_parameter = func[1] func_execution(*func_parameter)与列表绑定B
dict_list = [ [send_pic,['a/1.jpg','123']], [send_word,['a/1.jpg','123']], [send_audio,['a/1.jpg','123']], [send_video,['a/1.jpg','123']], ] for i in dict_list: func = i[0] parameter = i[1] func(*parameter)
- 与字典绑定
```python
def send_pic(path,content):
pass
def send_word(come,content):
pass
def send_audio(path,content):
pass
def send_video(path,content):
pass
func_list = [
{'name':send_pic,'parameter':{'path':'a/1.jpg','content':'123'}},
{'name':send_word,'parameter':{'come':'a/1.jpg','content':'123'}},
{'name':send_audio,'parameter':{'path':'a/1.jpg','content':'123'}},
{'name':send_video,'parameter':{'path':'a/1.jpg','content':'123'}},
]
for item in func_list:
func = item['name']
parameter = item['parameter']
func(**parameter)
```
### 函数赋值变量
> 函数名应避免重名与内置函数,否则覆盖
>
- 变量可指向任意对象的地址
- 任意对象都有他的方法
```python
def func(a,b):
print(a,b)
aa = func
func(1,2)
aa(1,2)
```
函数作为参数或返回值
函数作为参数
函数引用外部函数,修改内部数据。
#函数作为参数
def func_plus(a):
return a+100
def func_exec(a):
res = a(10)
return res
data = func_exec(func_plus)
print(data)
函数作为返回值
函数返回其他函数,替身函数,修改外部数据
#函数作为返回值
def func_plus(a):
return a+100
def func_handler():
print('使用func_plus函数')
return func_plus
data_source = func_handler()
data = data_source(10)
print(data)return与print差别
print在过程展示,return返回给调用者
def add_func():
print('123')
def inside_func(a):
ret = a()
return ret
v1 = inside_func(add_func)
print(v1)函数作用域
python中以函数为作用域,其他语言以缩进{}为作用域
函数内部数据共享,函数内部符合作用域定义
#函数内部数据共享
def func_zone1():
name = 'wupeiqi'
age = 18
print(age,name)
def func_zone2():
age = 23
name = 'alex'
print(age,name)
func_zone1()
func_zone2()#函数作用域
#函数内部不以缩进为作用域(适合其他语言),以函数内部为作用域
def func_zone1():
name = 'wupeiqi'
age = 18
for num in range(age):
final_num = num
print(final_num)
print(age,name)函数全局变量和局部变量
- 全局变量大写(不成文规定)
- 函数拥有局部变量,py文件拥有全局变量
- 优先调用函数内变量,函数中未定义函数从父级寻找
#函数作用域调用
PUB_URL = 'https://123.com'
PUB_NAME = '123'
#优先调用函数内变量,函数中未定义函数从父级寻找
def public_func():
a = [1,2,3]
print(a)
print(PUB_NAME)
public_func()函数默认可查看,修改可变类似的全局函数,不可重新指向新地址(赋值)
PUBLIC_LIST = [1,2,3] PUBLIC_NAME = 'alex' def change_pub(): PUBLIC_LIST.append(4) print(PUBLIC_NAME) change_pub() print(PUBLIC_LIST) # [1,2,3,4]函数使用global参数可重新对全局函数赋值
def change_pub2(): global PUBLIC_LIST global PUBLIC_NAME PUBLIC_LIST = [7,8,9] PUBLIC_NAME = 'eric' change_pub2() print(PUBLIC_LIST,PUBLIC_NAME) #[7, 8, 9] eric