Python 函数入门:变化的参数

  变化的参数html

  多个参数输入ide

  位置参数函数

  关键字参数ui

  默认值spa

  不定长参数: * 和 **.net

  传递任意数量的参数值orm

  传递任意数量的键值对htm

  传递元组、列表、字典对象

  传递元组it

  传递列表

  传递字典

  传递可能产生的问题

  多个参数输入

  昨天程序里大可能是只有一个参数的函数,不须要考虑其它问题。当咱们须要多参数时,有如下几种传递办法可选

  位置参数

  位置参数,就是在传递参数值的时候,必须和函数定义的参数一一对应,不然传递会发生误传甚至报错。

  例以下面这个有两个参数的函数:

  def price(name,cost):

  print('商品名称:%s,价格:%d'%(name,cost))

  >>> price('Mate30',4999) #正确输入

  商品名称:Mate30,价格:4999

  >>> price(4999,'Mate30') #错误输入

  TypeError: %d format: a number is required, not str

  然鹅听说这种传参是最经常使用的方法之一。

  这种固定形式传递的方法,要求咱们对参数足够熟悉,才能避免输错(用help啊)

  关键字参数

  为了不发生刚才的问题,就有了关键字参数:

  依然是price函数

  def price(name,cost):

  print('商品名称:%s,价格:%d'%(name,cost))

  为了不输错,在输入参数的时候,咱们能够用 指定参数名=值 的方法。

  这里直接反着输入试一下:

  >>> price(cost=4999,name='Mate30')

  商品名称:Mate30,价格:4999

  在参数比较少的时候,咱们也能够只指定一个参数:

  >>> price('Mate30',cost=4999)

  商品名称:Mate30,价格:4999

  可是,只能是以“左边不指定,右边指定”的 方式,若是反过来:

  >>> price(name='Mate30',4999)

  SyntaxError: positional argument follows keyword argument

  >>> price(cost=4999,'Mate30')

  SyntaxError: positional argument follows keyword argument

  这是说关键字参数不正确的意思

  默认值

  默认值就是在定义函数的时候直接让参数=一个值,当没有给这个参数传值的时候,这个参数就会用它本身的默认值

  def price(name='',cost=998):

  print('商品名称:%s,价格:%d'%(name,cost))

  这里就是默认给name参数’ ’ ,默认给cost参数998

  >>> price('ABC')

  商品名称:ABC,价格:998

  可是,默认值的使用也有局限性,在这个函数里,默认状况是输入一个值,当咱们输入price(6666)时,输出则会是

  >>> price(6666)

  商品名称:6666,价格:998

  并且和关键字参数同样,默认值定义函数的时候,也只能以“左边不指定,右边指定”的 方式,反过来则会报错

  >>> def price(name='ABC',cost):

  print('商品名称:%s,价格:%d'%(name,cost))

  SyntaxError: non-default argument follows default argument

  不定长参数: * 和 **

  为了使用方便,咱们在定义函数的时候是能够设置成不定长参数的

  传递任意数量的参数值

  格式:

  函数名([参数1,参数2,.....参数n,]*不定长参数)

  有一点要注意的是,带 * 的参数虽能够接受任意数量的值,可是一个自定义函数里只能有一个带 * 的参数,并且只能放在最右边。

  例子以下:

  这是一个记录了一天都完成什么任务的函数,完成的任务数量是不定的,因此要在result前面加一个*,这样result就是一个不定长参数

  >>> def record(date,*result):

  print(date)

  temp = ''

  for i in result:

  temp += ' ' + i

  print(temp)

  输入当日完成任务:

  >>> record('4月27日','Day11','高数Day11','英语Day11')

  4月27日

  Day11 高数Day11 英语Day11

  而这个不定长参数是以什么形式保存的呢?type一下便知

  ...

  print(type(result))

  ...

  4月27日

  Day11 高数Day11 英语Day11

  传递任意数量的键值对

  格式:

  函数名([参数1,参数2,.....参数n,]**不定长参数)

  一样,一个自定义函数只能有一个带 ** 的不定长参数,并且只能放在最右边。惟一不一样的就是,如今传递的是键值对。

  依然以记录任务为例,但此次要改为键值对的样子:

  def record(date,**result):

  print(date)

  print(result)

  输入完成的任务(注意这里输入键和值的写法)

  >>> record('4月27日',='Day11',高数='Day11',英语='Day11')

  4月27日

  {'': 'Day11', '高数': 'Day11', '英语': 'Day11'}

  type一下就知道此次传递回来的是什么类型的数据了

  传递元组、列表、字典

  传递元组

  >>> def record(date,result):

  print(date)

  print(type(result))

  print(result)

  >>> record('4月27日',('Day11','高数Day11','英语Day11'))

  4月27日沈阳妇科医院 http://yyk.39.net/hospital/fc843_doctors.html

  ('Day11', '高数Day11', '英语Day11')

  传递列表

  函数同上,只不过在输入的时候换成列表了

  >>> record('4月27日',[Day11','高数Day11','英语Day11'])

  4月27日

  ['Day11', '高数Day11', '英语Day11']

  传递字典

  函数依旧不变,输入再改为字典

  >>> D = {'': 'Day11', '高数': 'Day11', '英语': 'Day11'}

  >>> record('4月27日',D)

  4月27日

  {': 'Day11', '高数': 'Day11', '英语': 'Day11'}

  传递可能产生的问题

  以列表为例,自定义一个单价打折函数:

  >>> def discount(Mobile,price):

  print(Mobile)

  price[1] *= 0.9

  print(price)

  输入

  >>> L = ['Mate30',4999]

  >>> discount('HUAWEI',L)

  HUAWEI

  ['Mate30', 4499.1]

  可是当咱们再查看列表L的时候

  >>> L

  ['Mate30', 4499.1]

  咱们发现,L也被改变了,这是由于不管传递前仍是传递后的对象(列表、元组、字典)都是指向同一个地址的,一旦咱们在自定义函数内部让对象发生改变,这个改变会致使输入的对象也发生改变,而这每每是咱们不但愿发生的,因此为了不这个现象发生,咱们能够复制该对象。

  函数应改成:

  >>> def discount(Mobile,price):

  print(Mobile)

  L1 = price.copy()

  L1[1] *= 0.9

  print(L1)

  再从新输入

  >>> discount('HUAWEI',L)

  HUAWEI

  ['Mate30', 4499.1]

  >>> L

  ['Mate30', 4999]

  如此就会避免这个问题

  …

  …

相关文章
相关标签/搜索