九、函数参数及变量

一、函数参数介绍

  函数中的参数分为形参和实数。

  1、形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量
  2、实参可以是常量、变量、表达式函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值

  当实参是变量时举例:

def calc(x,y):
    '''
    计算x的y次幂
    :param x:整形数字
    :param y:整型数字
    :return:返回运算结果
    '''
    result=x**y
    return result
a = 2
b = 3
c=calc(a,b)
print(c)#运行结果:8

二、局部变量与全局变量

   在子程序定义的变量为全局变量,在程序最开始定义的变量为全局变量(没有缩进),全局变量任何时候都可以调用;

  全局变量作用域为整个程序,局部变量定义域为定义该变量的子程序;

  当全局变量与局部变量同名时:

    在定义局部变量的子程序内,局部变量起作用,在其他地方全局变量起作用,若想使全局变量也起作用,可用globe定义

例:

<当全局变量为字符串时>

  1、调用全局变量

name = '李白'#全局变量
def create_name():
    print('create_name:',name)#未给name赋值时,调用全局变量
create_name()#运行结果: create_name: 李白
print(name)#运行结果:李白

  2、调用局部变量

name = '李白'#全局变量
def create_name():
    name = '达摩'
    print('create_name:',name)#当给name赋值时,调用自己的变量(局部变量)
create_name()#运行结果: create_name: 达摩
print(name)#运行结果:李白

  3、当在函数中给变量赋值,但是想操作的是全局变量时(globe)

  也就是说,当函数内部存在globe时,函数也就是进行了修改操作,即对全局变量进行重新赋值;无globe时,只能执行查的操作。

name = '李白'
def create_name():
    global name
    name = '李白变达摩'
    print("create_name:",name)#运行结果: create_name: 李白变达摩
create_name()
print(name)#运行结果:李白变达摩

  4、当变量名称不同时,按照层次调用(先在自己的作用域去寻找)

name = "流语录"
def creat_name():
    name1 = "涨换"
    print("change_name:",name)#运行结果:change_name: 流语录
    print("creat_name:",name1)#运行结果:creat_name: 涨换
creat_name()
print(name)#运行结果:流语录

<当全局变量为列表时>

   1、调用全局变量

name = ["大苹果","大橘子"]
def creat_name():
    print("我要吃:",name)#运行结果:我要吃: ['大苹果', '大橘子']
creat_name()

  2、调用局部变量

name = ["大苹果","大橘子"]
def creat_name():
    name = "大香蕉"
    print("我要吃:",name)#运行结果:我要吃: 大香蕉
creat_name()

  3、当在函数中给变量赋值,但是想操作的是全局变量时(globe)

  (1)在全局变量的列表中进行值的添加 append         (说明:也就是说globe时,可对可变变量类型进行相关操作)

name = ["大苹果","大橘子"]
def creat_name():
    global name
    name.append("大香蕉")
    print("我要吃:",name)#运行结果:我要吃: ['大苹果', '大橘子', '大香蕉']
creat_name()

  (2)在全局变量的列表中进行值的清空 clear

name = ["大苹果","大橘子"]
def creat_name():
    global name
    name.clear()
    print("我要吃:",name)#运行结果:我要吃: []
creat_name()

小结:当全局变量为不同类型时,可根据类型的特点对全局变量进行相关的操作,比如增删改查等!!!

规则:全局变量的变量名要大写,局部变量为小写

  嵌套关系举例一:

NAME = "lyl"
def n1():
    name = "l"
    print(name)
    def n2():
        name = "y"
        print(name)
    n2()
def n3():
    global NAME
    NAME = "LTL"
    print(NAME)
n3()
n1()

  运行结果:

   嵌套关系举例二:

NAME = "风雨"
def n1():
    name="飘摇"
    def n2():
        global NAME
        name = "大风"
        print(name)
    n2()
    print(name)
n1()
print(NAME)

  运行结果:

 关键字nonlocal (指上级变量)

NAME = "风雨"
def n1():
    name="飘摇"
    def n2():
        nonlocal name
        name = "大风"
        print(name)
    n2()
    print(name)
n1()
print(NAME)

运行结果:

原文地址:https://www.cnblogs.com/hzzhbest/p/14678778.html