全局变量和局部变量
局部变量的作用范围仅限于函数内部,外部无法访问
函数内部可以使用全局变量但是无法修改全局变量
a = 100
def test_01():
a = 0
b = 110
print(a)
print(b)
def test_02():
print(a)
test_02()
函数注释
#def 函数名():
# 代码
def sum_01(a,b):
'''
a:int
b:int
:return 两数之和
'''
return a+b
sum_01(1,2)
round()
值传递
- 值传递:在传递参数时,仅仅是把拷贝一份传递给参数的函数,变量的值不发生变化
def test01(x,y):
x += 10
y += 20
print(x,y)
a = 10
b = 20
test01(a,b)
print(a)
print(b)
引用传递
- 在传递参数的时候,传地址,函数形参获取的值,也是同一块内存
def test02(nums):
nums.append(10)
nums.append(100)
print(nums)
list1 = [1,2,3]
test02(list1)
print(list1)
匿名函数
python中,存在函数作为参数传递给函数,并且不想被外界访问,而且参数足够简单,即可以定义为匿名函数(lambda 表达式)
#let a = function(){}
#python中,如果要将函数作为参数传到另外一个函数里
#python中函数参数的数据类型:只要是对象就可以
#函数本身就是一个对象
def compute(a,b):
return a+b
def test01(fn):
a = fn(1,2)
print(a)
#test01(compute)
test01(lambda a,b: a+b)
'''
lambda [a,b]:代码块
'''
偏函数
'''
def int2(x,base=2):
return int(x,base)
a = int2("10010")
print(a)
'''
#偏函数:
import functolls
int2 = functools.partial(int,base=2)
print(int2('10010'))
python3.8新特性
- 声明函数参数类型
#def fun(a,b,c)
#public static void fn(int a,double b,String c){
}
def add(x:int,y:float)->float:
print(x + y)
add(1,1)
#add("1","1")
函数的嵌套
def fun1():
b = 20
def fun2(): #fun2 = def(){}
print(b)
print("2222")
return fun2
a = fun1()
(a)
综上
1、函数可以作为返回值进行返回
2、函数可以作为参数进行传递
3、函数名本质上就是变量名,指向函数所在的内存地址
闭包
- 一个函数嵌套另一个函数,内层函数用到外层函数的局部变量
关键字:nonlocal
def outer():
a = 10
def inner():
nonlocal a
print(a)
print(a)
return inner
a = outer()
a()
a()
outer()
装饰器
装饰器本质上是一个闭包,作用:不改变原有函数的前提下,为函数添加新的功能,但是源代码没改变
运用:用户登录、日志
def play_dnf():
print("hi")
def play_wz():
print("游戏")
"""
装饰器雏形:
def wrapper(目标函数):
def inner():
之前添加的事情
目标函数原函数执行
之后添加的事情
return inner
@wrapper #目标函数 = wrapper(目标函数) 为目标函数重新赋值
"""