在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。

  不可变类型:

  a = 1 #把1赋值给a

  a = 2 #把2赋值a

  这一过程中其实是重新创建新的值为2的对象a,原先指向1的变量a 被废弃了

  可变类型:

  l = [1,2,3]

  l[0] = 99

  l这一过程中只是修改而已,l 指向这个列表的变量没有变化

  def changeList(self,mylist):

  mylist.extend([1,2,3])

  print('函数内的list: ',mylist)

  def changeInt(self,a):

  a = 10

  print('函数内的int: ',10)

  if __name__ == '__main__':

  s = Student()

  l = [11,22,33]

  s.changeList(l)

  print('函数外的list:',l)

  a = 100

  s.changeInt(a)

  print('函数外的int: ',a)

  结果:

  函数内的list: [11, 22, 33, 1, 2, 3]

  函数外的list: [11, 22, 33, 1, 2, 3]

  函数内的int: 10

  函数外的int: 100

  小结:

  从代码可以看出,不可变的参数传入后并函数外并没有改变值,具有不可变性;而列表,传入参数后列表内容发生改变,函数外的列表也一同发生改变,具有可变性。

  ===========================================================================

  以下是调用函数时可使用的正式参数类型:

  必需参数

  关键字参数

  默认参数

  不定长参数

  必须参数:

  调用该函数数必须传参数

  def fun(needValue):

  print(needValue)

  fun(123)

  关键字参数:郑州不  孕 不  育医院:jbk.39.net/yiyuanzaixian/zztjyy/

  在调用函数的时候,可以指定关键字,此时可以不需要管函数的参数顺序。

  def fun(needValue):

  print(needValue)

  fun(needValue = 123)

  默认参数:

  如果定义函数的时候,参数是设置为默认的形式,在调用函数的时候,参数可以不需要填写。

  def fun(needValue=123):

  print(needValue)

  fun()

  不定长参数:

  你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述 2 种参数不同,声明时不会命名。基本语法如下:

  *参数 表示以元组(tuple)的形式导入

  第一个参数为可选参数

  def functionname([formal_args,] *var_args_tuple ):

  “函数_文档字符串”

  function_suite

  return [expression]

  def fun(str,*args): #传两个参数,第一个是一个值的,第二个是一个元组

  print(str,args)

  fun('kyd','a','b','c')

  结果:

  kyd ('a', 'b', 'c')

  def fun(str,*args): #传两个参数,第一个是一个值的,第二个是一个元组

  print(str,args)

  fun('str') #只传第一个参数,第二个参数不传

  结果:

  kyd () 得到结果是一个空元组

  def fun(*args): #只定义多参数的元祖

  print(args)

  fun(1,2,3)

  结果:

  (1,2,3)

  **args 不定长参数可以以字典的形式,基本语法:

  def functionname([formal_args,] **var_args_dict ):

  “函数_文档字符串”

  function_suite

  return [expression]

  def fun(str,**args):

  print(str)

  print((args))

  fun('kyd',a=1,b=2,c=3) #注意调用函数的时候,字典的键值对以=分割

  结果:

  kyd

  {'a': 1, 'b': 2, 'c': 3}