python怎么向类中的函数传递参数

作者&投稿:长兴命 (若有异议请与网页底部的电邮联系)
Python如何向函数传递参数?~

s=[3,2,5,1]
sorted(s,reverse=True)
默认reverse=False,排序为正序。传入reverse=True,排序就是倒序

首先你要明白,Python的函数传递方式是赋值,而赋值是通过建立变量与对象的关联实现的。
对于你的代码:
执行 d = 2时,你在__main__里创建了d,并让它指向2这个整型对象。
执行函数add(d)过程中:
d被传递给add()函数后,在函数内部,num也指向了__main__中的2
但执行num = num + 10之后,新建了对象12,并让num指向了这个新对象——12。
如果你明白函数中的局部变量与__main__中变量的区别,那么很显然,在__main__中,d仍在指着2这个对象,它没有改变。因此,你打印d时得到了2。
如果你想让输出为12,最简洁的办法是:
在函数add()里增加return num
调用函数时使用d = add(d)
代码如下:
def add(num):
num += 10
return num
d = 2
d = add(d)
print d

Python中函数参数的传递是通过“赋值”来传递的。但这条规则只回答了函数参数传递的“战略问题”,并没有回答“战术问题”,也就说没有回答怎么赋值的问题。函数参数的使用可以分为两个方面,一是函数参数如何定义,二是函数在调用时的参数如何解析的。而后者又是由前者决定的。函数参数的定义有四种形式:

1. F(arg1,arg2,...)
2. F(arg2=<value>,arg3=<value>...)
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=<value>必须在arg后
2. *arg必须在arg=<value>后
3. **arg必须在*arg后

在函数调用过程中,形参赋值的过程是这样的:
首先按顺序把“arg”这种形式的实参给对应的形参
第二,把“arg=<value>”这种形式的实参赋值给形式
第三,把多出来的“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}

我再补充一下:直接写个例子,看注释就能明白
class Person:
#有时写作Person(object):
#表示继承object中的一些方法(如__init__等)
#在python3中没区别,已经默认继承了
def __init__(self, init_name):
self.name = init_name
def greet(self):
print('Hi, my name is %s' %self.name)
p1 = Person('David')
#这个David传参比较特殊,因为是传给init初始化方法,所以可以直接写在类后面
#一般我们需要给类中定义的方法或属性赋值的时候,用的是.访问,而不在创建类对象时传参
p1.greet()

class A:
    def a(self, d):
        print(d)
        
d = {'a': 1}
a = A()
a.a(d)



python怎么向类中的函数传递参数
第1 种方式是最“传统”的方式:一个函数可以定义不限个数参数,参数(形式参数)放在跟在函数名后面的小括号中,各个参数之间以逗号隔开。用这种方式定义的函数在调用的时候也必须在函数名后的小括号中提供相等个数的值(实际参数),不能多也不能少,而且顺序还必须相同。也就是说形参和实参的个数...

第2次日常评价:+python中类实例化如何将数据传递到类内部,举例说明,有...
在Python中,可以通过构造函数和实例变量将数据传递到类内部。一种常见的方式是在类的构造函数中传递数据。构造函数通常被称为“init”,它在类被实例化时自动调用。在构造函数中,可以通过参数传递数据并将其存储为实例变量。例如:class MyClass: def __init__(self, data): self.data = data my_...

Python如何用列表向类传参?急!在线等!
构造函数 还是类的方法函数,都与普通函数一样可以使用列表传入多个 实参 。class MyClass:...def __init __(self:a,b,c):...pass 对于MyClass,我们一般使用下列方式 实例化 :x=MyClass(1,2,3)如果我们实例化使用的参数在列表l中,可以这样做:l=[1,2,3]x=MyClass(*l)

Python如何用列表向类传参?急!在线等!
class MyClass:...def __init__(self:a,b,c):...pass 对于MyClass,我们一般使用下列方式实例化:x=MyClass(1,2,3)如果我们实例化使用的参数在列表l中,可以这样做:l=[1,2,3]x=MyClass(*l)

python 如何向类方法传入参数
class hello(object): def world(self,msg): print msgc = hello()c.world('hello world')

Python怎么调用类里里面的列表?
在Python中,要调用类里面的列表,你首先需要创建这个类的一个实例(对象),然后通过这个实例来访问类中的列表。下面是一个简单的例子来说明这个过程:python复制代码 class MyClass:def __init__(self):在类初始化时创建一个列表 self.my_list = [1, 2, 3, 4, 5]创建类的一个实例 my_...

Python面向对象编程:入门篇(类和对象)
Python作为一门面向对象编程语言,其设计初衷便强调了这一特性,即使对于初次接触编程的初学者也相对友好。本文将从基础入门,逐步讲解类和对象的概念。让我们开始。面向对象编程(OOP)的核心是围绕对象进行设计,将数据(属性)和处理这些数据的方法(函数)组合成一个单元,即对象。每个对象都是类的一个...

python 如何调用类的方法
foo(1) \/\/executing class_foo(<class '__main__.A'>,1) A.class_foo(1) \/\/executing class_foo(<class '__main__.A'>,1) a.static_foo(1) \/\/executing static_foo(1) A.static_foo(1) \/\/executing static_foo(1)类方法和静态方法都可以被类和类实例调用,...

在python中,定义类的关键字是
class。Python中用于定义类的关键字是class,通过使用class关键字,可以创建自定义的对象类型,称为类,类是面向对象编程的基本构建块,允许封装数据和功能以创建可重用的代码。

python中可以直接用类调用方法吗
python里方法在类中是作为类的属性的,在解释之前,这边先给个例子 >>>class Pizza(object):... radius = 42... def __init__(self, size=10):... self.size = size... def get_size(self):... return self.size... @staticmethod... def mix_ingredients(x,...

濮阳市18031285673: Python如何用列表向类传参?急!在线等! -
景岚联苯: 无论是类的构造函数还是类的方法函数,都与普通函数一样可以使用列表传入多个实参.class MyClass:....def __init__(self:a,b,c):........pass 对于MyClass,我们一般使用下列方式实例化:x=MyClass(1,2,3) 如果我们实例化使用的参数在列表l中,可以这样做:l=[1,2,3] x=MyClass(*l)

濮阳市18031285673: python在定义类的时候,如何把类函数传递给另一个变量,如下 -
景岚联苯: 别在类的定义时将类名赋值,调用时才可以.class fun: print "hi,world" def __init__(self, params): fun2 = fun fun2 如果想用switch,python中惯用字典来实现d = {key1:value1,key2:value2},通过判断d[key1]的值,来选择分支.

濮阳市18031285673: python 怎么将元组中的内容全部变成参数传给函数 -
景岚联苯: select count(*) from v$process --当前的连接数 select value from v$parameter where name = 'processes' --数据库允许的最大连接数 修改最大连接数: alter system set processes = 300 scope = spfile; 重启数据库: shutdown immediate; startup;

濮阳市18031285673: Python 的函数是怎么传递参数的? -
景岚联苯: 首先你要明白,Python的函数传递方式是赋值,而赋值是通过建立变量与对象的关联实现的.对于你的代码:执行 d = 2时,你在__main__里创建了d,并让它指向2这个整型对象.执行函数add(d)过程中:d被传递给add()函数后,在函数内部,...

濮阳市18031285673: python怎样接收参数 -
景岚联苯: Python中函数参数的传递是通过“赋值”来传递的,函数参数的接收传递有四种形式:1. F(arg1,arg2,...)2. F(arg2=,arg3=...)3. F(*arg1)4. F(**arg1)第1 种方式是最“传统”的方式:一个函数可以定义不限个数参数,参数(形式参数)...

濮阳市18031285673: python 像这样定义多线程的类在调用时怎么把调用父类的参数传递给子函数 -
景岚联苯: 你已经实现了啊.在__init__初始化参数里,将参数传递进去.另外因为线程工作在主程序同一个空间里,所以可以用全局变量传递.比如定义一个global v,然后在主程序里设置好.再在线程里用global v来引用.如果在线程运行当中,动态的改...

濮阳市18031285673: Python中怎么向sorted()传递参数reverse=True -
景岚联苯: 1、查看sorted()函数的帮助信息.sorted(iterable,/,*,key=None,reverse=False). 2、iterable可迭代的对象.sorted对对象排序,返回的对象不会改变原对象. 3、key根据自定义规则来排序.字符串排序key默认则按照首字母排序,指定key以后按照指定规则排序.参数reverse默认值为False,表示正序,reverse=True表示倒序. 4、对元组列表进行排序,分别按照元组的不同对象,可以选定任意位置排序. 5、对字典的操作,可以在key中的lambda设置更多条件.

濮阳市18031285673: Python里面的函数怎么按引用传递参数 -
景岚联苯: 如果你用C给Matlab写过MEX程序,那么这个问题是很容易理解的(好像每次讨论Python问题时我总是把Matlab搬了出来…… 《在Matlab中把struct当成Python中的Dictionary使用》《Matlab和Python的几种数据类型的比较》). 既然提到了MEX...

濮阳市18031285673: python 命令行传参的几种方法 -
景岚联苯: 安装之后配置环境变量的步骤如下: 1,点“我的电脑”,右键选“属性” 2,选择:高级系统设置3,选择:环境变量4,在“系统变量”中选中“Path”5,点“编辑”-再点“编辑文本”6,在“变量值”一栏,把自己所安装的python路径拷进去就可以了,我安装的路径是“C:\Python27”. 7,完成之后,一路点击确定关闭,就可以了. 8,这里要强调一下,现在下载的python都自带pip,pip在python目录下的Scripts目录下,添加到系统的path路径中就可以使用了.

濮阳市18031285673: python函数的参数如何作为参数传个下一个函数,大概意思如下: -
景岚联苯: addid()中最后加一句,return a,那addid()的结果就是a,将addid()作为参数即可.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网