wns9778.com_威尼斯wns.9778官网

热门关键词: wns9778.com,威尼斯wns.9778官网
wns9778.com > 计算机教程 > Python学习--方法的参数分类wns9778.com:

原标题:Python学习--方法的参数分类wns9778.com:

浏览次数:69 时间:2019-05-11

wns9778.com 1

python中定义方法的参数主要有四种:

上节课已经简单的跟大家讲了如何定义一个方法,但是并没有深入去讲,这一节我们继续来学习定义方法中需要注意的几点

1、普通参数:

 

    普通参数非常普遍。

默认参数

 前面我们讲到定义一个方法时是可以传递参数的,除了这个功能,实际上python在定义方法时还可以自己预先定义一些参数,这些参数一般被称为默认参数(Default Argument Value)

def f1(name, age):
    print('my name is %s, i am %s years old' % (name, age))

参数赋值

比如下面一个官方的例子

def ask_ok(prompt, retries=4, reminder="Please try again"):
   ...:     while True:
   ...:         ok = input(prompt)
   ...:         if ok in ('y', 'ye', 'yes'):
   ...:             return True
   ...:         if ok in ('n', 'no', 'nop', 'nope'):
   ...:             return False
   ...:         retries = retries - 1
   ...:         if retries < 0:
   ...:             raise ValueError("invalid user response")
   ...:         print(reminder)

首先在定义方法的时候传了三个参数

其中retriesremider都传了默认的参数

下面通过几种形式调用这个方法

传递一个参数

ask_ok('Do you really want to quit?') 

 因为只传递了一个参数,而这个参数的形式参数就是prompt,另外两个参数因为已经有了默认的值,所以这时候程序并不会报错

 

传递两个参数

ask_ok('OK to overwrite the file?', 2) 

 第二次调用我们传了两个参数,这时解释器会自动根据参数的顺序来赋实参,第一个传给没有默认值的prompt,第二个按照顺序赋值给了第二个形式参数,也就是retries,最后一个形式参数因为有默认值所以不会包错

传递所有参数

ask_ok('OK to overwrite the file?', 2, 'Come on, only yes or no!') 

 这个相信不用解释了吧,按照顺序传递实参

 

    name和age就是两个普通的参数。在调用方法f1时,一定按照定义时的顺序依次传入name和age两个实参。

变量赋初值

除了在定义方法时给参数赋准确的值以外,你还可以指定一个变量,作为 参数的值

例如以下代码

In [6]: i = 6

In [7]: def func(arg=i):
   ...:     print(arg)
   ...:

In [8]: i = 7

In [9]: func()
6

  

在开始的时候定义一个变量i,然后直接在方法中指定参数为i,最后修改了i的值,最终输出的修改后的i的值

 

 f1('Andy', 21)

可变类型作为参数

在这里要注意一下,当你定义方法时传的是一个可变的参数时,例如列表、字典时,会有一点不同

例如以下代码

In [10]: def func(a, L=[]):
    ...:     L.append(a)
    ...:     return L
    ...:

In [11]: print(func(1))
[1]

In [12]: print(func(2))
[1, 2]

In [13]: print(func(3))
[1, 2, 3]

  

参数的值并不会被初始话(也就是消除),会有一个内存区域专门存放这一部分的值

如果你不想保留存在的值

这时你就可以使用以下方法来解决这个问题

In [14]: def func(a, L=None):
    ...:     if L is None:
    ...:         L = []
    ...:     L.append(a)
    ...:     return L

  

2、默认参数:

关键字参数(Keyword argument)

关键字参数,也可以看作是一个键值对应的参数类型,也就是前面讲的字典类型

你可以通过关键字参数传递很多需要的信息

同时你也可以在后面调用方法时对它进行更改

例如下面一行代码,定义一个方法

def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'): 
    print("-- This parrot wouldn't", action, end=' ') 
    print("if you put", voltage, "volts through it.") 
    print("-- Lovely plumage, the", type) 
    print("-- It's", state, "!")

  

在传递参数时需要注意以下几点

parrot(1000) # 按照位置传递实参
parrot(voltage=1000) # 按照参数名传递参数
parrot(voltage=1000000, action='VOOOOOM') #  按照参数名传递参数
parrot(action='VOOOOOM', voltage=1000000) #  按照参数名传递参数
parrot('a million', 'bereft of life', 'jump') # 按照位置传递参数
parrot('a thousand', state='pushing up the daisies') # 一个位置参数,一个参数名称

  

但需要注意以下几点

  1. 没有赋初值的参数,不能直接略过
  2. 在传递覆盖默认值参数时,一定要记得加上关键字
  3. 不能重复传递参数
  4. 不能传递定义方法中没有的关键字参数

 

 

有时候,你可能并不知道穿进来的参数有多少个,这时你就可以把多出来的参数,存为一个列表,或是一个字典,这个是经常用的

比如我们下面定义一个方法

In [15]: def cheeseshop(kind, *args, **kwargs):
    ...:     print("-- Do you have any", kind, "?")
    ...:     print("--I'm sorry, we're all out of", kind)
    ...:     for arg in args:
    ...:         print(arg)
    ...:     print("-"*40)
    ...:     for kw in kwargs:
    ...:         print(kw, ":", kwargs[kw])
    ...:

In [16]: cheeseshop("Limburger", "It's very runny, sir.", "It's really very, VERY runny, sir.", shopkeeper="Michael Pal
    ...: in", client="John Cleese", sketch="Cheese Shop Sketch")
-- Do you have any Limburger ?
--I'm sorry, we're all out of Limburger
It's very runny, sir.
It's really very, VERY runny, sir.
----------------------------------------
shopkeeper : Michael Palin
client : John Cleese
sketch : Cheese Shop Sketch

  

注意列表参数是*开头的,字典参数是**开头的

 

苏十三博客网站 www.susmote.com

 

    默认参数是指在定义方法是给某个形式参数一个默认的值。

   

def f2(name, age, home='Shanghai'):
    print('my name is %s, i am %s years old, i come from %s' % (name, age, home))

    在调用该方法时,如果不传递实参,则该参数的实参是定义方法时指定的值,如果调用时传递了实参,则这个参数的值就是传递的值。

f2('an', 21)
>>>my name is an, i am 21 years old, i come from Shanghai
f2('an', 21, 'Jiangxi')
>>>my name is an, i am 21 years old, i come from Jiangxi

      在定义这种方法时一定要把带有默认值的参数放在参数列表的最后。

  1. 指定参数

    指定参数方法的定义和普通方法无异,在传递实参时不必非得按照定义的参数顺序传递,但是要指定传递的实参是给哪个形参的,其形式如下:

f1(age=21, name='an')
>>>my name is an, i am 21 years old
  1. 可变参数

    可变参数的意义是传递的实参个数是没有个数限制的,0个到n个参数都可以。它的形式是:   

def calc(*args):
    s = 0
    for i in args:
        s  =i
    print(s)

    所以我们在调用的时候就可以传入0个或多个实参了,这些参数在函数调用的时候被组装为一个tuple。

calc(1, 2, 3)  

 如果事先拿到的数据就是一个list或者tuple怎么办呢?我们可以在list或者tuple的的实参前面加上*号把它们转化为可变参数:

本文由wns9778.com发布于计算机教程,转载请注明出处:Python学习--方法的参数分类wns9778.com:

关键词: wns9778.com

上一篇:CentOS 7 vi编辑命令

下一篇:没有了