Python_函数提高

Python_函数提高

1. 变量作用域

  • 局部变量:只在函数体内部生效。
    作用:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量。
def testA():
    a=100
    print(a)  #函数体内部访问,能访问到a变量

testA()
print(a)  #报错,a是局部变量,函数外部无法访问
  • 全局变量:在函数体内、外都能生效的变量。
a=100

def testA():
    print(a)

def testB():
    print(a)

testA()   #100
testB()   #100

注意:修改全局变量的值

a=100

def testA():
    print(a)

def testB():
    a=200   #此时的a为局部变量
    print(a)

testA()   #100
testB()   #200
print(a)   #100
a=100

def testA():
    print(a)

def testB():
    global a   #修改全局变量
    a=200   #此时的a为全局变量
    print(a)

testA()   #100
testB()   #200
print(a)   #200

2.多函数程序执行流程

  • 共用全局变量
a=10

def testA():
    global a
    a=100
    print(a)

def testB():
    print(a)

testB()  #10   还没有调用testA
testA()   #100   修改了全局变量
testB()   #100  先调用了testA
print(a)   #100   修改了全局变量
  • 返回值作为参数传递
def testA():
    return 20

def testB(num):
    print(num)

result=testA()   #得到testA的返回值

testB(result)    #参数传入  50

3.函数的返回值
注意:如果一个函数有多个return不能都执行,只执行第一个return;无法做到一个函数多个返回值

def return_test():
    return 1
    return 2

result=return_test()
print(result)    #1

调整后一个函数多个返回值的写法:

def return_test():
    return 1,2    #返回的是一个元组

result=return_test()
print(result)    #(1,2)
def return_test():
    return {
     'name':'liming','age':10}    #字典 {'name': 'liming', 'age': 10}
    # return [100,200]   #列表 [100,200]
    # return (10,20)   #元组(10,20)

result=return_test()
print(result)

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

4. 函数参数

4.1 位置参数

位置参数:调用函数时根据函数定义的位置参数来传递参数。
注意:传递和定义参数的顺序及个数必须一致。

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

# stu_info('liming',20,'男')    #您的姓名是liming,年龄是20,性别是男
# stu_info('liming',20)   #报错,个数定义和传入不一致
stu_info(20,'liming','男')   #顺序应该和定义的保持一致,否则导致数据无意义

4.2 关键字参数
关键字参数:通过"键=值"的形式来加以指定,可以让函数更加清晰,容易使用,同时也清除了参数的顺序需求。
注意:函数调用时,如果有位置参数,位置参数必须在关键字参数前面(如果没有在前面,则会报错),但关键字参数之间 不存在先后顺序。

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

stu_info('liming',age=20,sex='男')    #您的姓名是liming,年龄是20,性别是男
stu_info('Tom',sex='男',age=27)      #您的姓名是Tom,年龄是27,性别是男

4.3 缺省参数

缺省参数(默认参数):用于定义函数,为参数提供默认值,调用函数时可以不传该默认参数的值。
注意:
(1)所有位置参数必须出现在默认参数前面,包括函数定义和调用。
(2)函数调用时,如果为缺省参数传值则会修改默认参数值;否则使用这个默认值。

def stu_info(name,age,sex='男'):
    print(f'您的姓名是{name},年龄是{age},性别是{sex}')

stu_info('liming',20)     #您的姓名是liming,年龄是20,性别是男
stu_info('Rose',12,'女')    #您的姓名是Rose,年龄是12,性别是女

4.4 不定长参数

不定长参数(可变参数):用于不确定调用的时候会传递多少个参数或不传参也可以。

  • 包裹位置传递(组包):传进的所有参数都被args变量收集,它会根据传进参数的位置合并为一个元组,args是元组类型。
def stu_info(*args):
    print(args)

stu_info('Tom')    #('Tom',)
stu_info('Tom',29)   #('Tom', 29)
stu_info()    #()
  • 包裹关键字传递(组包):传进的所有参数都被kwargs变量收集,它会根据传进参数的位置合并为一个字典,kwargs是字典类型。
def stu_info(**kwargs):
    print(kwargs)

stu_info(name='liming',age=20)     #{'name': 'liming', 'age': 20}
stu_info(name='liming',age=20,sex='男')    #{'name': 'liming', 'age': 20, 'sex': '男'}

5. 拆包和交换变量值

5.1 拆包

  • 拆包:元组
def return_num():
    return 100,200

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

5.2 交换变量值

  • 方法一:借助第三变量存储变量
a = 10
b = 20
c = 0
c = a
a = b
b = c
print(a)    #20
print(b)    #10
  • 方法二:
a,b=10,20
print(a)   #10
print(b)   #20

a,b=b,a
print(a)   #20
print(b)   #10

6. 引用

6.1 了解引用

在python中,值是靠引用来传递的。

  • int类型(不可变类型)
a = 1
b = a
print(b)   #1

print(id(a))     #140712041738512
print(id(b))     #140712041738512

a=2
print(a)   #2
print(b)   #1  (说明int为不可变类型)

print(id(a))      #140712041738544    (为2重新开辟一段内存空间,1不变)
print(id(b))      #140712041738512
  • list类型(可变类型)
aa=[10,20]
bb=aa
print(bb)   #[10, 20]

print(id(aa))   #2116452504136
print(id(bb))   #2116452504136

aa.append(30)  #列表是可变类型
print(aa)    #[10, 20, 30]
print(bb)    #[10, 20, 30]

print(id(aa))    #2680429761096
print(id(bb))    #2680429761096

6.2 引用当做实参

  • 不可变类型
# 不可变类型
def testA(a):
    print(a)     #100
    print(id(a))    #140711686929776
    a += a
    print(a)    #200
    print(id(a))    #140711686932976

b=100
testA(b)
  • 可变类型
# 可变类型
def testA(a):
    print(a)    #[11, 22]
    print(id(a))    #2138237194824
    a += a
    print(a)     #[11, 22, 11, 22]
    print(id(a))     #2138237194824

b=[11,22]
testA(b)

7. 可变类型和不可变类型

  • 可变类型:数据能够直接修改
    (1)列表
    (2)字典
    (3)集合
  • 不可变类型:数据不能直接修改
    (1)整型
    (2)浮点型
    (3)字符串
    (4)元组

你可能感兴趣的:(Python)