python函数进阶
1.函数和函数名
函数名其实就是一个变量,只不过代指的是函数
注意:函数必须先定义才能被调用执行【定义在前调用在后】(解释型语言)
2.1函数做元素
函数相当于一个变量,在列表等元素中可以把函数当做元素
def func():
return 2
data_list=[1,'func',func,func()]
data_list[0] #整数1
data_list[1] #字符串func
data_list[2] #函数 func
data_list[2]() #调用函数 2
data_list[3] #函数值 2
注意:函数可被哈希,所以函数名可以当做集合的元素,字典的键
2.2函数名赋值
-
将函数名赋值给其他变量,函数名其实就是个变量,代指某个函数;如果将函数名赋值给另一个变量,则此变量也会代指该函数
def func(a1,a2): print(a1,a2) a=func #a和func都代指上面的函数,都可以执行该函数 func(1,2) #3 a(1,2) #3
-
对函数名重新赋值,将函数名修改为其他值,函数名便不再代指函数
def func(a1,a2): print(a1,a2) func(1,2) func='wxy' func(2,3) # 报错TypeError: 'str' object is not callable def func(a1,a2): print(a1,a2) func(1,2) def func(): print(111) func() #上面函数被覆盖 func(2,3) #TypeError: func() takes 0 positional arguments but 2 were given
注意:函数名被重新定义后,就会将变量变成新定义的值,所以在自定义函数时,不要与内置函数重名,否则会覆盖内置函数的功能
内置函数 id,len,hex,oct...
2.3函数名做参数和返回值
-
参数(函数当参数)
def add(num): return num+1 def handler(func): res=func() #调用传入的函数 print(res) #打印函数返回值 #将add函数以参数的形式传入handler中 handler(add)
-
返回值(函数当返回值)
def add(num): return num+1 def handler(): print('你好') return add #调用handler函数,返回值为add函数 result=handler() #调用add函数,返回值赋值给data data=result(1) 2
3.返回值和print
- 在函数中使用print,只是用于在某个位置输出内容
- 在函数中使用return,将函数执行的结果返回给调用者,以便后续操作
注意:执行函数,要懂的分析函数执行的步骤
4.作用域
作用域,理解为是一块空间,空间里的数据可以共享,其他空间的无法获取
4.1函数为作用域
-
python以函数为作用域,所以在函数中创建的数据,函数内部都可以被使用,但无法在其他函数中使用
-
了解变量在哪个作用域是否可以别调用
def func(): #在循环的时候,函数空间内会创建变量num,在循环中重新赋值,最后num=9 for num in range(10): print(num) #python以函数为作用域,所以for循环外面调用num,也不报错 print(num) #9
4.2全局和局部
函数作用域就是一个局部作用域
- 全局作用域创建的变量称为【全局变量】,可以在全局作用域使用,也可以在局部作用域使用
- 函数内部维护的就是一个局部作用域,在各自函数内部创建的变量称为【局部变量】,局部变量只能在自己的作用域使用,局部作用域使用变量查找顺序【先在自己的作用域中找,如果没有,再查找上一级】
注意:全局变量一般都是大写
https://www.luffycity.com/