admin 发表于 2018-4-15 21:35:08

1.16.2 函数进阶(非固定参数、全局与局部变量)、返回值、嵌套函数

非固定参数若你的函数在定义时不确定用户想传入多少个参数,就可以使用非固定参数。def stu_register(name,age,*args): # *args 会把多传入的参数变成一个元组形式
    print(name,age,args)

stu_register("Alex",22)
#输出
#Alex 22 () #后面这个()就是args,只是因为没传值,所以为空

stu_register("Jack",32,"CN","Python")
#输出
# Jack 32 ('CN', 'Python')还可以有一个**kwargs。def stu_register(name,age,*args,**kwargs): # *kwargs 会把多传入的参数变成一个dict形式
    print(name,age,args,kwargs)

stu_register("Alex",22)
#输出
#Alex 22 () {}#后面这个{}就是kwargs,只是因为没传值,所以为空

stu_register("Jack",32,"CN","Python",sex="Male",province="ShanDong")
#输出
# Jack 32 ('CN', 'Python') {'province': 'ShanDong', 'sex': 'Male'}

admin 发表于 2018-4-15 21:44:29

局部变量 name = "Alex Li"
def change_name(name):
    print("before change:",name)
    name = "金角大王,一个有Tesla的男人"
    print("after change", name)
change_name(name)
print("在外面看看name改了么?",name)输出
before change: Alex Li
after change 金角大王,一个有Tesla的男人
在外面看看name改了么? Alex Li全局与局部变量在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
当全局变量与局部变量同名时:
在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。




admin 发表于 2018-4-15 21:47:58

返回值 要想获取函数的执行结果,就可以用return语句把结果返回注意:
[*]函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着函数的结束
[*]如果未在函数中指定return,那这个函数的返回值为None


admin 发表于 2018-4-15 21:52:42

嵌套函数  看上面的标题的意思是,函数还能套函数?of course
name = "Alex"

def change_name():
    name = "Alex2"

    def change_name2():
      name = "Alex3"
      print("第3层打印",name)

    change_name2() #调用内层函数
    print("第2层打印",name)


change_name()
print("最外层打印",name)执行结果是:第3层打印 Alex3
第2层打印 Alex2
最外层打印 Alex此时,在最外层调用change_name2()会出现什么效果?没错, 出错了, 为什么呢?嵌套函数的用法会了,但它有什么用呢?下节课揭晓。。。

页: [1]
查看完整版本: 1.16.2 函数进阶(非固定参数、全局与局部变量)、返回值、嵌套函数