python_变量_函数传参详解

1. 局部变量

局部变量,就是在 函数内部定义的变量
不同的函数,可以定义相同的名字的局部变量,但是各用个的不会产生影响
局部变量的作用域只在函数内部
局部变量的目的是 存储需要临时保存的数据

 # 函数中的两个局部变量虽然同名,但互不影响
    def test1():
        a = 10
        print("%d" % a)


    def test2():
        a = 5
        print("%d" % a)

    test1()
    test2()

2. 全局变量

2.1 概念

在函数外边定义的变量叫做 全局变量
全局变量能够在所有的函数中进行访问

    # 定义全局变量
    a = 100

    def test1():
        print(a)

    def test2():
        print(a)

    # 调用函数
    test1()
    test2()

2.2 函数内修改全局变量

看如下代码:
    a = 10
    def test():
        a = 5
        print("函数内a:%d" %a)

    test()
    print("函数外a:%d" %a)
    函数内赋值变量 时,默认为定义并赋值局部变量,赋值后获取的也是局部变量的值
    如果在函数中修改全局变量,那么就需要使用global进行声明,否则出错
    a = 10

    def test():
        global a
        a = 5  # 修改全局变量
        print("函数内a:%d" %a)

    test()
    print("函数外a:%d" %a)

2.3 全局变量命名规范

python社区中没有区分全局变量和局部变量的书写方法,为了方便区分全局变量和局部变量,全局变量可以命名为 g_变量名
全局变量一般 定义在文件顶部

3. 函数返回值

3.1 多个return

def is_even_num(num):
    """判断奇偶数"""
    if num % 2 == 0:
        return True
    else:
        return False
一个函数中可以有多个return语句,但是只要有一个return语句被执行,那么这个函数就会结束

3.2 多个返回值

def func2():
	return 1, 1.5

    a = func2()
    print(a)

    a, b = func2()
    print(a)
    print(b)

    a, b, c = 1, 1.5, "hello"
    print(a)
    print(b)
    print(c)
当返回多个数据时,python会自动将数据 组包 成元组
如果使用多个变量接收返回值,python会自动将元组 拆包 成单个数据

4. 函数参数

4.1 缺省参数

形参设定默认值 称为 缺省参数
调用函数时,如果没有传入缺省参数对应的实参,则实参使用默认值。

def printinfo(name, age = 35):
    # 打印任何传入的字符串
    print("Name: %s", % name)
    print("Age: %s", % age)

 # 调用printinfo函数
 printinfo("miki")
 printinfo("miki", 20)
注意:带有默认值的行参一定要位于参数列表的最后面。
 >>> def printinfo(name, age=35, sex):
 ...     print name
 ...
   File "<stdin>", line 1
 SyntaxError: non-default argument follows default argument

4.2 命名参数

调用函数时,实参可以指定对应的形参,称为 命名参数

def printinfo(name, age):
     # 打印任何传入的字符串
     print("Name: %s", % name)
     print("Age: %s", % age)

  printinfo(age=9,name="miki" )

4.3 不定长参数

需求: 参数数量不确定,能否接收?

4.3.1 args

  • 函数可以定义 不定长参数,用于接收任意多数量的参数
  • 不定长参数的前边需要添加*,用于提示python解释器该参数为不定长参数
  • 使用不定长参数直接用args即可(不需要加*)

不定长参数的本质是 将传递的参数包装成了元组

def sum_num(a, b, *args):  
    result = a + b
    for temp in args:
        result += temp

    return result

sum_num(1, 2, 3, .., n)

# 命名参数一旦使用,所有实参都要使用,除非该实参为不定长参数
# sum_num(1, 2, 3, 4, a=5)
# sum_num(a=5, b=4)

4.3.2 kwargs

不定长参数还有一种形式 可以接收不存在的命名参数
定义参数时需要在变量名前添加两个*
这种不定义参数会将 不存在的命名参数包装成字典

defsum_num(a, b, *args, **kwargs):  
    print(a)
    print(b)
    print(args)
    print(kwargs)

sum_num(1, 2, 3, .., n, mm=5, nn=6)
传递不定长参数
如果 将不定长参数传递给其他函数,则需要在不定长参数前添加对应的*,才能正常传递

def sum_num(a, b, *args, **kwargs):  
    print(a)
    print(b)
    print(args)
    print(kwargs)
    test(*args, **kwargs)


def test(*args, **kwargs):
    print(args)
    print(kwargs)

sum_num(1, 2, 3, .., n, mm=5, nn=6)

5. 拆包

def get_my_info():
    high = 178
    weight = 100
    age = 18
    return high, weight, age


# result = get_my_info()
# print(result)

my_high, my_weight, my_age = get_my_info()
print(my_high)
print(my_weight)
print(my_age)

总结:
拆包时要注意,需要拆的数据的个数要与变量的个数相同,否则程序会异常
除了对元组拆包之外,还可以对列表、字典等拆包

In [17]: a, b = (11, 22)
In [18]: a
Out[18]: 11
In [19]: b
Out[19]: 22

In [20]: a, b = [11, 22]
In [21]: a
Out[21]: 11
In [22]: b
Out[22]: 22

In [23]: a, b = {"m":11, "n":22}  # 取出来的是key,而不是键值对
In [24]: a
Out[24]: 'm'
In [25]: b
Out[25]: 'n'
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值