Python学习笔记(十五)函数 PartTwo

Python学习笔记(十五)函数 PartTwo

一、变量的作用域

变量的作用域指的是变量生效的范围,主要分为两类:局部变量全局变量

  • 局部变量
    所谓局部变量是定义在函数体内部的变量,即只在函数体内部生效
def testA():
    a = 100
    print(a)
    
testA()
print(a)

在这里插入图片描述
局部变量的作用:在函数体内部,临时保存数据,即在函数调用完后,则销毁局部变量。

  • 全局变量
    所谓全局变量,指的是在函数体内外都能生效的变量。

思考:如果一个数据在函数体内外都要用,怎么办?
答案:设置为全局变量

a = 100  #全局变量a:函数体内外都能访问

print(a)

def testA():
    print(a)

def testB():
    print(a)

testA()
testB()

结果截图:
在这里插入图片描述
思考:上述例子中,testB函数需求修改变量a的值为200,如何修改程序?
在这里插入图片描述
那么,怎么做到testB函数修改全局变量呢?

  # global 关键字声明a为全局变量
    global a
    a = 200
a = 100  #全局变量a:函数体内外都能访问

print(a)  #100

def testA():
    print(a)  #100

def testB():
    # global 关键字声明a为全局变量
    global a
    a = 200
    print(a)  #200

testA()
testB()

print(a)  #200  在testB已经修改全局变量a了

二、多函数程序的执行流程

一般在实际开发过程中,一个程序往往由多个函数组成,并且多函数共享一些数据。

  • 共用全局变量
    在这里插入图片描述
  • 返回值作为参数传递
def test1():
    return 50

def test2(num):
    print(num)
    
result = test1()
test2(result)  #50

三、函数的返回值

函数有多个返回值的情况:
在这里插入图片描述
上面的情况只能返回一个返回值,那么怎么返回多个返回值呢?

def return_num():
    return 1,2

result = return_num()
print(result)  #(1,2), 返回的是元组

注意:

  1. return a,b 写法,返回多个数据的时候,默认是元组类型。
  2. return后面可以连接列表、元组和字典,以返回多个值。
def return_num():
    return 1,2

result = return_num()
print(result)  #(1,2), 默认返回的是元组


def return_num1():
    return (10, 20, 30)

result1 = return_num1()
print(result1)

def return_num2():
    return [10, 20, 30]

result2 = return_num2()
print(result2)

def return_num3():
    return {'name': 'Python', 'age': 3}

result3 = return_num3()
print(result3)

在这里插入图片描述

四、函数的参数

4.1 位置参数

在这里插入图片描述

4.2 关键字参数

在这里插入图片描述

4.3 缺省参数(默认参数)

在这里插入图片描述

4.4 不定长参数(可变参数)

以下两种都是参数不确定的情况:
在这里插入图片描述
在这里插入图片描述

例子:

def user_info(name,age,gender):
    print(f'您的姓名是{name},年龄{age},性别是{gender}')

# 1.位置参数
user_info('Tom',12,'男')

# 2. 关键字参数
user_info('Rose',age=15,gender='女')  # 位置参数必须写在关键字参数前
user_info(gender='男',name ='小明',age=12)  # 关键字参数无先后顺讯

# 3. 缺省参数(默认参数)
def user_info1(name,age,gender='男'):
    print(f'您的姓名是{name},年龄{age},性别是{gender}')

user_info1('Tom',12)  #没有为缺省参数传值,表示使用默认值
user_info1('Rose',18,'女')  #如果缺省参数传值则修改默认参数值

# 4.不定长参数(可变参数)
def user_info2(*args):
    print(args)

user_info2()
user_info2('Tom')
user_info2('Tom',20)
user_info2('Tom',20,'男')

def user_info3(**kwargs):
    print(kwargs)

user_info3(name = 'Tom')
user_info3(name = 'Tom', age = 18, gender ='男' )

结果截图:
在这里插入图片描述

五、拆包和交换两个变量的值

5.1 拆包

-拆包:元组

def return_num():
    return 100,200

num1,num2 = return_num()
print(num1)  #100
print(num2)  #200

-拆包:字典

dict1 = {'name':'Tom','age':19}
a,b = dict1

print(a)  #a为key值
print(b)  #b为key值

print(dict1[a])  #'Tom'
print(dict1[b])  #19

在这里插入图片描述

5.2 交换变量的值

需求:a = 10和 b = 20 ,交换两个变量的值。

  • 方法一
    借助第三变量存储数据。
a = 10
b = 20
# 1. 定义中间变量
c = 0

# 2. 将a的数据存储到c
c = a

# 3. 将b的数据赋值到a
a = b

# 4. 将c的数据赋值到b
b = c

print(a)  #20
print(b)  #10
  • 方法二
a,b = 1,2
a,b = b,a
print(a)  #2
print(b)  #1

六、引用

在Python中,值是靠引用来传递的。
我们可以用 id() 来判断两个变量是否为同一个值的引用。 我们可以将id值理解为那块内存的地址标识。

# 1. int类型
a = 1
b = a

print(b)  #1

print(id(a))  #2045600944
print(id(b))  #2045600944

a = 2

print(b) # 1,说明int类型为不可变类型
print(id(a))  #2045600960,此时得到的是数据2的内存地址
print(id(b))  #2045600944

# 2.列表
list1 = [1,2]
list2 = list1

print(list2)  #[1.2]
print(id(list1))  #51070456
print(id(list2))  #51070456

list1.append(3)

print(list2)  # [1,2,3],列表为可变类型
print(id(list1))  #58934776
print(id(list2))  #58934776

引用当做实参:
例子:

# 需求:引用是否能当实参传递
def test1(a):
    print(a)
    print(id(a))

    a += a
    print(a)
    print(id(a))

# int : 计算前后id值不同
b = 100
test1(b)

# 列表 :计算前后id值相同
c = [10,20]
test1(c)

结果截图:
在这里插入图片描述

七、可变和不可变类型

在这里插入图片描述

八、总结

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值