当前位置:首页 » 编程语言 » python参数

python参数

发布时间: 2022-01-08 19:28:23

1. python程序如何使用参数

用sys模块,使用sys.argv接收参数,sys.argv是一个列表,第2个元素开始是传递进来的值,传递的时候用空格割开就好

import sys
for x in sys.argv:
....print(x)



2. python怎么查看函数参数

在开发中我们可以借助于相关插件或使用Python内置函数"help()”来查看某个函数的参数说明,以查看内置函数sorted()为例:

3. python函数的几种参数类型

#Python 2.5 #这个可以用修饰器来完成 #但是一般不会限制参数类型 #给你个思路: def argfilter(*types): def deco(func): #这是修饰器 def newfunc(*args): #新的函数 if len(types)==len(args): correct = True for i in range(len(args)): if not isinstance(args[i], types[i]): #判断类型 correct = False if correct: return func(*args) #返回原函数值 else: raise TypeError else: raise TypeError return newfunc #由修饰器返回新的函数 return deco #返回作为修饰器的函数 @argfilter(int, str) #指定参数类型 def func(i, s): #定义被修饰的函数 print i, s #之后你想限制类型的话, 就这样: #@argfilter(第一个参数的类名, 第二个参数的类名, ..., 第N个参数的类名) #def yourfunc(第一个参数, 第一个参数, ..., 第N个参数): # ... # #相当于: #def yourfunc(第一个参数, 第一个参数, ..., 第N个参数): # ... #yourfunc = argfilter(第一个参数的类名, 第二个参数的类名, ..., 第N个参数的类名)(yourfunc)

4. python怎样接收参数

Python中函数参数的传递是通过“赋值”来传递的,函数参数的接收传递有四种形式:

1. F(arg1,arg2,...)

2. F(arg2=,arg3=...)

3. F(*arg1)

4. F(**arg1)

第1
种方式是最“传统”的方式:一个函数可以定义不限个数参数,参数(形式参数)放在跟在函数名后面的小括号中,各个参数之间以逗号隔开。用这种方式定义的函数在调用的时候也必须在函数名后的小括号中提供相等个数的值(实际参数),不能多也不能少,而且顺序还必须相同。也就是说形参和实参的个数必须一致,而且想给形参1的值必须是实参中的第一位,形参与实参之间是一一对应的关系,即“形参1=实参1
形参2=实参2...”。很明显这是一种非常不灵活的形式。比如:"def addOn(x,y): return x +
y",这里定义的函数addOn,可以用addOn(1,2)的形式调用,意味着形参x将取值1,主将取值2。addOn(1,2,3)和addOn
(1)都是错误的形式。

第2种方式比第1种方式好一点,在定义的时候已经给各个形参定义了默认值。因此,在调用这种函数时,如果没有给对应的形式参数传递实参,那么这个形参就将使用默认值。比如:“def
addOn(x=3,y=5): return x +
y”,那么addOn(6,5)的调用形式表示形参x取值6,y取值5。此外,addOn(7)这个形式也是可以的,表示形参x取值7,y取默认值5。这时候会出现一个问题,如果想让x取默认值,用实参给y赋值怎么办?前面两种调用形式明显就不行了,这时就要用到Python中函数调用方法的另一大绝招
──关健字赋值法。可以用addOn(y=6),这时表示x取默认值3,而y取值6。这种方式通过指定形式参数可以实现可以对形式参数进行“精确攻击”,一个副带的功能是可以不必遵守形式参数的前后顺序,比如:addOn(y=4,x=6),这也是可以的。这种通过形式参数进行定点赋值的方式对于用第1种方式定义的函数也是适用的。

上面两种方式定义的形式参数的个数都是固定的,比如定义函数的时候如果定义了5个形参,那么在调用的时候最多也只能给它传递5个实参。但是在实际编程中并不能总是确定一个函数会有多少个参数。第3种方式就是用来应对这种情况的。它以一个*加上形参名的方式表示,这个函数实际参数是不一定的,可以是零个,也可以是N个。不管是多少个,在函数内部都被存放在以形参名为标识符的tuple中。比如:

对这个函数的调用addOn() addOn(2) addOn(3,4,5,6)等等都是可以的。

与第3种方式类似,形参名前面加了两个*表示,参数在函数内部将被存放在以形式名为标识符的dictionary中。这时候调用函数必须采用key1=value1、key2=value2...的形式。比如:

1. def addOn(**arg):

2. sum = 0

3. if len(arg) == 0: return 0

4. else:

5. for x in arg.itervalues():

6. sum += x

7. return sum

那么对这个函数的调用可以用addOn()或诸如addOn(x=4,y=5,k=6)等的方式调用。

上面说了四种函数形式定义的方式以及他们的调用方式,是分开说的,其实这四种方式可以组合在一起形成复杂多样的形参定义形式。在定义或调用这种函数时,要遵循以下规则:

1. arg=必须在arg后

2. *arg必须在arg=后

3. **arg必须在*arg后

在函数调用过程中,形参赋值的过程是这样的:

首先按顺序把“arg”这种形式的实参给对应的形参

第二,把“arg=”这种形式的实参赋值给形式

第三,把多出来的“arg”这种形式的实参组成一个tuple给带一个星号的形参

第四,把多出来的“key=value”这种形式的实参转为一个dictionary给带两个星号的形参。

听起来好复杂,实际是是很简单的。很直观,来看例子:

1. def test(x,y=5,*a,**b):

2. print x,y,a,b

就这么一个简单函数,来看看下面对这个函数调用会产生什么结果:

test(1) ===> 1 5 () {}

test(1,2) ===> 1 2 () {}

test(1,2,3) ===> 1 2 (3,) {}

test(1,2,3,4) ===> 1 2 (3,4)

test(x=1) ===> 1 5 () {}

test(x=1,y=1) ===> 1 1 () {}

test(x=1,y=1,a=1) ===> 1 1 () {'a':1}

test(x=1,y=1,a=1,b=1) ===> 1 1 () {'a':1,'b':1}

test(1,y=1) ===> 1 1 () {}

test(1,2,y=1) ===> 出错,说y给赋了多个值

test(1,2,3,4,a=1) ===> 1 2 (3,4) {'a':1}

test(1,2,3,4,k=1,t=2,o=3) ===> 1 2 (3,4) {'k':1,'t':2,'o':3}

5. python中 形式参数和实际参数有什么区别

在函数声明时候的参数, def printme( str ),里面的str就是形参。形式上的参数,作用就是当个占位符。
在函数实际调用,传入的实际上的值,比如 printme("hello"),中的“hello”就是实参。实际参数,是具体的值

6. python中什么是位置参数

先说说函数定义,我们都知道,下面的代码定义了一个函数funcA
def funcA():
pass

显然,函数funcA没有参数(同时啥也不干:D)。
下面这个函数funcB就有两个参数了,
def funcB(a, b):
print a
print b
调用的时候,我们需要使用函数名,加上圆括号扩起来的参数列表,比如 funcB(100, 99),执行结果是:
100
99
很明显,参数的顺序和个数要和函数定义中一致,如果执行funcB(100),Python会报错的:
TypeError: funcB() takes exactly 2 arguments (1 given)
我们可以在函数定义中使用参数默认值,比如
def funcC(a, b=0):
print a
print b
在函数funcC的定义中,参数b有默认值,是一个可选参数,如果我们调用funcC(100),b会自动赋值为0。
OK,目前为止,我们要定义一个函数的时候,必须要预先定义这个函数需要多少个参数(或者说可以接受多少个参数)。一般情况下这是没问题的,但是也有在定义函数的时候,不能知道参数个数的情况(想一想C语言里的printf函数),在Python里,带*的参数就是用来接受可变数量参数的。看一个例子
def funcD(a, b, *c):
print a
print b
print "length of c is: %d " % len(c)
print c
调用funcD(1, 2, 3, 4, 5, 6)结果是
1
2
length of c is: 4
(3, 4, 5, 6)
我们看到,前面两个参数被a、b接受了,剩下的4个参数,全部被c接受了,c在这里是一个tuple。我们在调用funcD的时候,至少要传递2个参数,2个以上的参数,都放到c里了,如果只有两个参数,那么c就是一个empty tuple。
好了,一颗星我们弄清楚了,下面轮到两颗星。
上面的例子里,调用函数的时候,传递的参数都是根据位置来跟函数定义里的参数表匹配的,比如funcB(100, 99)和funcB(99, 100)的执行结果是不一样的。在Python里,还支持一种用关键字参数(keyword argument)调用函数的办法,也就是在调用函数的时候,明确指定参数值付给那个形参。比如还是上面的funcB(a, b),我们通过这两种方式调用
funcB(a=100, b=99)

funcB(b=99, a=100)
结果跟funcB(100, 99)都是一样的,因为我们在使用关键字参数调用的时候,指定了把100赋值给a,99赋值给b。也就是说,关键字参数可以让我们在调用函数的时候打乱参数传递的顺序!
另外,在函数调用中,可以混合使用基于位置匹配的参数和关键字参数,前题是先给出固定位置的参数,比如
def funcE(a, b, c):
print a
print b
print c
调用funcE(100, 99, 98)和调用funcE(100, c=98, b=99)的结果是一样的。
好了,经过以上铺垫,两颗星总算可以出场了:
如果一个函数定义中的最后一个形参有 ** (双星号)前缀,所有正常形参之外的其他的关键字参数都将被放置在一个字典中传递给函数,比如:
def funcF(a, **b):
print a
for x in b:
print x + ": " + str(b[x])
调用funcF(100, c='你好', b=200),执行结果
100
c: 你好
b: 200
大家可以看到,b是一个dict对象实例,它接受了关键字参数b和c。

7. Python中参数为None是什么意思

extent是一个默认参数,如果不给出该参数值那么该参数就使用默认值None。circle(r)等价于circle(r, None)或circle(r, extent=None)。如果要指定参数extent那么调用应该写成circle(r, xxx)或circle(r, extent=xxx)。

热点内容
安卓机怎么关闭主题 发布:2024-12-26 21:55:57 浏览:911
javafor线程 发布:2024-12-26 21:54:35 浏览:740
python自定义模块 发布:2024-12-26 21:41:37 浏览:54
linux安装mysqltar 发布:2024-12-26 21:18:02 浏览:314
浏览器的java支持 发布:2024-12-26 21:15:45 浏览:652
电商高管如何配置 发布:2024-12-26 21:13:48 浏览:706
批发的算法 发布:2024-12-26 21:13:46 浏览:204
安卓手机在日本下载哪个导航 发布:2024-12-26 21:09:32 浏览:556
白噪声加密 发布:2024-12-26 20:31:02 浏览:638
怎么防止电脑删除脚本 发布:2024-12-26 20:19:19 浏览:150