Python基础(五)—函数(参数解析、global、递归)
in python基础 with 0 comment

Python基础(五)—函数(参数解析、global、递归)

in python基础 with 0 comment

形参和实参

形参即函数内使用的参数,实参即调用函数时的赋值,如下:

  def tmp(name):  # 形参 
      print(name)
  
  tmp('实参')

形参类型

除了可变参数无法与命名关键字参数混合,其余皆可混合使用,但是定义的顺序必须为:必选参数、默认参数、可变参数命名关键字参数、关键字参数。

  def tmp(*params, name='lz', age='24'):
      for param in params:
          print('param:' + param)
      print(name)
      print(age)

  tmp(11, name='ss',age='22')  
  """
      1.在调用含有可变参数的函数时,在可变参数后的形参进行设置默认值。
      2.在调用函数时,尽量将调用函数内的参数写为:形参=实参,这样增加代码的可读性,也使得增加函数调用的准确性。
  """

函数和过程

函数是用返回值的,过程是没有返回值的。对于python严格来说,只有函数,没有过程!
函数也可以有多个返回值。
如下个例子:

  def hello():
      print('hello python')

  tmp = hello()
  print(tmp)  # None
  print(type(tmp))  # <class 'NoneType'>

  # 返回多个至
  def returnTmp(name, age):
      return '名字:' + name, '年龄:' + str(age)

  name, age = returnTmp('lz', 24)

  print(name, age)  #名字:lz 年龄:24

可以看出函数都是用返回值的。这是因为python都是动态的确定变量类型,其实就是没有变量,只有名字。

全局变量和局部变量

函数内的即局部变量,函数外的即为全局变量,函数外访问局部变量会出错。
函数可以访问全局变量,但不要试图去修改全局变量,因为在函数内修改全局变量的话,python会在该函数新定义一个名字一样的局部变量。

  def tmp():
      print(g_name)  # 报错UnboundLocalError: local variable 'g_name' referenced before assignment,如果不加:g_name = 'lz1',则不报错
      g_name = 'lz1'
      print(g_name)

  g_name = 'lz'
  tmp()
  print(g_name)
  # lz1
  # lz

global关键字

如果在函数内部试图修改全局变量,Python会使用屏蔽的方式(shadowing机制)去保护全局变量,即创建该函数内的同名的局部变量,所以这样就算修改,也只是修改了函数创建的局部变量,而全局变量却没有改变。
global关键字提供了函数内修改全局变量的方法。

 name = 'lz'
 def tmp():
     global name
     name = 'lzz'

 tmp()
 print(name)  # lzz,成功修改

递归

Responses