Python函数高级

3 篇文章 0 订阅
2 篇文章 0 订阅

函数--嵌套调用

简单掠过

函数--变量的作用域

局部变量和全局变量

局部变量:

在函数内部定义的变量,只能在函数内部使用

不同的函数局部变量名字可以相同

全局变量:

在函数外部定义的变量(没有定义在某一函数内)

所有函数内部都可使用

局部变量能解决的问题,不要通过全局变量解决,尽量少定义全局变量

局部变量作用范围

  • 局部变量从调用函数的时候开始在内存出现,函数调用完毕,局部变量从内存消失
  • 如果一个函数内部定义了局部变量,但是这个函数没有被调用,那么局部变量也不在内存中存在

全局变量的作用范围

  • 全局变量一般定义在函数定义的上方
  • 全局变量从定义变量开始在内存中出现,一直到程序运行完成,和程序一起从内存中消失

局部变量与全局变量重名

  • 如果在函数内部定义一个变量,名字和全局变量重名,那么在这个函数内部只能使用局部变量

如何在函数内部修改全局变量的值?

在函数内部用global声明一下,就可以修改全局变量了

num1=8
def my_func01():
    global num1
    num1=1   #这里是修改了全局变量
a = 1

def my_test1():
    global a
    a = 2

def my_test2():
    a = 3   # 这里的a是一个只在my_test2里面的局部变量
    my_test1()

print(a)  # 程序入口在这里 注意:定义函数时不执行,调用时才执行
my_test2()
print(a)


终端显示
1
2

形参与实参的值传递

  • 如果形参的类型为数字或者字符串,在函数内部修改了形参的值,实参的值不会改变

def my_func1(a):   # 这里的a是形参, 这里的a只是一个属于函数my_func1的形参,而不是全局变量a
    a += 1  # 在函数内部,修改了形参a的值,不是修改了全局变量a的值
    print(a) # 输出了形参a的值

a = 10  # 程序的入口 定义一个全局变量a,值是10
my_func1(a)  # 把全局变量a做为实参,去调用函数my_func1
print(a) # 全局变量a的值没有改变

# 当实参类型为数字或者字符串, 形参的值改变了,实参的值不会改变
  • 函数的形参,本质就是一个属于函数内部的局部变量

a = 10

def my_test1(a):
    a += 1   # 重名后,这里操作的是局部变量a
    print(a)


my_test1(a)  # 把全局变量做为形参来调用my_test1函数了
print(a)
# 代码中一共出现两个变量
# 全局变量a和一个形参a(形参其实就是一个属于函数内部的局部变量)
  • 形参类型如果是列表,集合字典,形参的值改变,会影响实参的值

a = [1, 2, 3]

def my_test1(a):  # 这里的a是一个形参,也是一个属于my_test1的局部变量
    a[0] = 10  # 修改的是形参a的值
    # 如果形参的类型为列表,集合和字典,修改形参的值会直接影响实参的值

print(a)  # 显示的是全局变量a的值
my_test1(a) # 把全局变量做为实参,来调用my_test1
print(a)

形参的缺省值:

语法:

def  函数名(形参 = 缺省值)

def my_test1(a, b = 10):  # 形参b有缺省值
    print(a, b)

def my_test2(a = 1, b = 2):
    print(a, b)

my_test1(1, 2)
my_test1(100)
my_test2()
my_test2(100, 12)

不能把有缺省值的形参写在没有缺省值形参的前面

# def my_test3(a = 10, b):  不能把有缺省值的形参写到没缺省值形参的前面
#     print(a, b)

lambda

  • lambda是给特别小型的函数准备一个简化语法

  • 不用写def,也不用写return

  • 一行代码就能定义一个函数

  • 语法

lambda 参数1, 参数2, ..... : 函数执行代码

# def my_sum(a, b):
#     return a + b

my_sum = lambda a, b : a + b  #定义了my_sum函数,自带return功能
print((lambda a, b: a + b)(3, 4))#与上边等同
num1 = my_sum(3, 4)
print(num1)
num1 = my_sum(23, 4)
print(num1)
# def my_max(a, b):
#     if a > b:
#         return a
#     else:
#         return b

# num1 = my_max(4, 5)
num1 = (lambda a, b : a if a > b else b)(4, 5)
print(num1)

lambda注意事项

  • 匿名函数内部只能有一条语句,而且这条语句要有个具体的值返回

  • 匿名函数不能使用print

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值