51学通信论坛2017新版

标题: 1.16.2 函数进阶(非固定参数、全局与局部变量)、返回值、嵌套函数 [打印本页]

作者: admin    时间: 2018-4-15 21:35
标题: 1.16.2 函数进阶(非固定参数、全局与局部变量)、返回值、嵌套函数
非固定参数
若你的函数在定义时不确定用户想传入多少个参数,就可以使用非固定参数。
  1. def stu_register(name,age,*args): # *args 会把多传入的参数变成一个元组形式
  2.     print(name,age,args)

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

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

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

  6. stu_register("Jack",32,"CN","Python",sex="Male",province="ShanDong")
  7. #输出
  8. # Jack 32 ('CN', 'Python') {'province': 'ShanDong', 'sex': 'Male'}
复制代码


作者: admin    时间: 2018-4-15 21:44
局部变量 
  1. name = "Alex Li"
  2. def change_name(name):
  3.     print("before change:",name)
  4.     name = "金角大王,一个有Tesla的男人"
  5.     print("after change", name)
  6. change_name(name)
  7. print("在外面看看name改了么?",name)
复制代码
输出
  1. before change: Alex Li
  2. after change 金角大王,一个有Tesla的男人
  3. 在外面看看name改了么? Alex Li
复制代码
全局与局部变量
在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
当全局变量与局部变量同名时:
在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。





作者: admin    时间: 2018-4-15 21:47
返回值 
要想获取函数的执行结果,就可以用return语句把结果返回
注意:



作者: admin    时间: 2018-4-15 21:52
嵌套函数  看上面的标题的意思是,函数还能套函数?of course
  1. name = "Alex"

  2. def change_name():
  3.     name = "Alex2"

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

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


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







欢迎光临 51学通信论坛2017新版 (http://bbs.51xuetongxin.com/) Powered by Discuz! X3