python函数提高

文章目录

  • 局部变量与全局变量
  • 返回值作为参数传递
  • 函数具有多个返回值的情况
  • 函数中参数的传递
    • 位置参数
    • 关键字参数
    • 默认参数
    • 不定长参数
      • 包裹位置传递
      • 包裹关键字传递
  • 拆包

python函数提高_第1张图片

局部变量与全局变量

  • 局部变量的作用范围在函数体内部,临时保存,当函数调用完后会销毁。
  • 全局变量在函数体内外都能生效的变量,当某个数据,在函数体内外都要使用则可定义为全局变量
a = 100
def testA():
    print(a)
def testB():
    print(a)
testA()
testB()

100
100

修改全局变量的值

a = 100
def testA():
    print(a)
def testB():
    a = 200
    print(a)
testA()
testB()
print(a)

100
200
100

如果想在testB函数中修改全局变量的值,上述方法是不可以的,因为在testB函数中修改,进行的是局部变量的修改,不会影响到全局变量。

a = 100
def testA():
    print(a)
def testB():
    global a # 修改a为全局变量
    a = 200
    print(a)
testA()
testB()
print(a)

100
200
200
  • 全局变量在函数内部使用时,需要用保留字global声明,语法形式为global<全局变量>
  • 在使用全局变量时,全局变量的数值是随着函数的推进而发生变化。

返回值作为参数传递

def func1():
    return 100

def func2(num):
    print(num)
    
func2(func1())# 函数2的参数是函数1的返回值

100

函数具有多个返回值的情况

当遇到return会有返回值,但也会使函数体下面的程序不执行。

def return_num():
    return 1
    return 2

print(return_num())

1

当具有多个返回值时,不能写多个return。使用return a,b的形式,默认是元组类型。

def return_num():
    return 1,2

print(return_num())

(1, 2) # 元组类型

return可返回元组、字典和列表。

def return_num():
    return {
     'name':'python','age':50}

print(return_num())

{
     'name': 'python', 'age': 50}

函数中参数的传递

位置参数

根据函数定义时的位置顺序来传递参数

def user_info(name,age,address):
    print('{}年龄为{}住在{}'.format(name,age,address))

user_info('Tom',20,'Beijing')

Tom年龄为20住在Beijing

关键字参数

使用键=值的形式来指定,关键字之间无先后顺序。

def user_info(name,age,address):
    print('{}年龄为{}住在{}'.format(name,age,address))

user_info('Tom',20,'Beijing') # 位置传递
user_info(name='Mary',address='Shanghai',age=30) # 关键字传递

Tom年龄为20住在Beijing
Mary年龄为30住在Shanghai

注:函数调用时,如果有位置参数,位置参数应该在关键字参数之前,关键字参数之间无先后顺序。

默认参数

在函数定义时,可以将某些参数设置为默认值,调用时若不传递该参数,则使用默认值。但要注意若有位置参数,位置参数必须在最前面。所有参数必须在默认参数之前。

def user_info(name,age,address='Beijing'): # address为默认参数
    print('{}年龄为{}住在{}'.format(name,age,address))

user_info('Tom',20) # 默认参数
user_info(name='Mary',address='Shanghai',age=30) # 传入address数据,则用真实数据。

Tom年龄为20住在Beijing
Mary年龄为30住在Shanghai

不定长参数

用于调用时不确定会传递多少个参数的时候使用。像生活中,填写信息有必填项和选填项,参数数量不确定。

包裹位置传递

传递位置参数且不确定个数时使用。

def user_info(*avgs):
    print(avgs)

user_info('Tom',20) 
user_info('Mary','Shanghai',30)

('Tom', 20)
('Mary', 'Shanghai', 30)

书写代码时,传递参数args中,*是必不可少的。args名字可改,但默认不改。从结果可看出,返回的结果是一个元组*。

包裹关键字传递

传递关键字参数且不确定个数时使用。**kwargs与上面的*args用法相同

def user_info(**kwargs):
    print(kwargs)

user_info(name = 'Tom',age = 20,address = 'Beijing')

{
     'name': 'Tom', 'age': 20, 'address': 'Beijing'}

调用时为关键字参数,可以看出返回的为一个字典

拆包

将一个整体拆分开来,以下为元组的拆包。

def return_num():
    return 100,200

a,b = return_num() # 元组拆包
print(a)
print(b)

100
200

你可能感兴趣的:(python基础,python)