LINUX是什么时候诞生的
是什么时候诞生的? 还有,主要优点是什么?
更新时间:2024-02-28 09:02
最满意答案
首先你要明白,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函数的格式 def function_name(arg1,arg2[,...]): statement [return value] #以下是示例,定义TEST函数 >>> a=2 >>> b=2 >>> def test(b): ... test=a*b ... return test >>> print test(10) 20
Python中函数的参数传递 1.普通的参数传递 >>> def add(a,b): return a+b >>> print add(1,2) 3 >>> print add('abc','123') abc123 2.参数个数可选,参数有默认值的传递 >>> def myjoin(string,sep='_'): return sep.join(string) >>> myjoin('Test') 'T_e_s_t' >>> myjoin('Test',';') 'T;e;s;t' >>> def myrange(start=0,stop,step=1): print stop,start,step SyntaxError: non-default argument follows default argument 参数sep的缺省值是'_' 如果这个参数不给定值就会使用缺省值 如果给定 则使用给定的值 需要注意 如果一个参数是可选参数 那么它后面所有的参数都应该是可选的,另外 可选参数的顺序颠倒依然可以正确的给对应的参数赋值 但必须清楚的指明变量名和值 3.个数可变参数 >>> def printf(fmt,*arg): print fmt%arg >>> printf ('%d is larger than %d',2,1) 2 is larger than 1 函数中的*arg必须是最后一个参数,*表示任意多个参数,*arg会把除了前面以外所有的参数放到一个tuple里面传递给函数,可以在函数中通过arg来访问 arg是一个tuple,可以通过访问tuple的方法在函数中访问arg 另一种方式传递任意个数参数是通过dictionary的方式来传递 同样也可以接受多个参数 但是每个参数需要指明名称对应关系比如a=1,b=2,c=3 >>> def printf(format,**keyword): for k in keyword.keys(): print "keyword[%s] %s %s"%(k,format,keyword[k]) >>> printf('is',one=1,tow=2,three=3) keyword[three] is 3 keyword[tow] is 2 keyword[one] is 1 这些方法可以混在一起用 但是一定要注意顺序,函数会先接受固定参数,然后可选参数,然后任意参数(tuple),然后字典任意参数(dict)
对象vs变量 在python中,类型属于对象,变量是没有类型的,这正是python的语言特性,也是吸引着很多pythoner的一点。所有的变量都可以理解是内存中一个对象的“引用”,或者,也可以看似c中void*的感觉。所以,希望大家在看到一个python变量的时候,把变量和真正的内存对象分开。 类型是属于对象的,而不是变量。 这样,很多问题就容易思考了。 例如: 对象vs变量 12 nfoo = 1 #一个指向int数据类型的nfoo(再次提醒,nfoo没有类型)lstfoo = [1] #一个指向list类型的lstfoo,这个list中包含一个整数1 可更改(mutable)与不可更改(immutable)对象 对应于上一个概念,就必须引出另了另一概念,这就是可更改(mutable)对象与不可更改(immutable)对象。 对于python比较熟悉的人们都应该了解这个事实,在python中,strings, tuples, 和numbers是不可更改的对象,而list,dict等则是可以修改的对象。那么,这些所谓的可改变和不可改变影响着什么呢? 可更改vs不可更改 12345 nfoo = 1nfoo = 2lstfoo = [1]lstfoo[0] = 2 代码第2行中,内存中原始的1对象因为不能改变,于是被“抛弃”,另nfoo指向一个新的int对象,其值为2 代码第5行中,更改list中第一个元素的值,因为list是可改变的,所以,第一个元素变更为2。其实应该说,lstfoo指向一个包含一个对象的数组。赋值所发生的事情,是有一个新int对象被指定给lstfoo所指向的数组对象的第一个元素,但是对于lstfoo本身来说,所指向的数组对象并没有变化,只是数组对象的内容发生变化了。这个看似void*的变量所指向的对象仍旧是刚刚的那个有一个int对象的list。 如下图所示: python的函数参数传递:传值?引用? 对于变量(与对象相对的概念),其实,python函数参数传递可以理解为就是变量传值操作,用c++的方式理解,就是对void*赋值。如果这个变量的值不变,我们看似就是引用,如果这个变量的值改变,我们看着像是在赋值。有点晕是吧,我们仍旧据个例子。 不可变对象参数调用 12345 def changeint( a ): a = 10nfoo = 2 changeint(nfoo)print nfoo #结果是2 这时发生了什么,有一个int对象2,和指向它的变量nfoo,当传递给changeint的时候,按照传值的方式,复制了变量nfoo的值,这样,a就是nfoo指向同一个int对象了,函数中a=10的时候,发生什么?(还记得我上面讲到的那些概念么),int是不能更改的对象,于是,做了一个新的int对象,另a指向它(但是此时,被变量nfoo指向的对象,没有发生变化),于是在外面的感觉就是函数没有改变nfoo的值,看起来像c++中的传值方式。 可变对象参数调用 12345 def changelist( a ): a[0] = 10lstfoo = [2]changelist(lstfoo )print nfoo #结果是[10] 当传递给changelist的时候,变量仍旧按照“传值”的方式,复制了变量lstfoo 的值,于是a和lstfoo 指向同一个对象,但是,list是可以改变的对象,对a[0]的操作,就是对lstfoo指向的对象的内容的操作,于是,这时的a[0] = 10,就是更改了lstfoo 指向的对象的第一个元素,所以,再次输出lstfoo 时,显示[10],内容被改变了,看起来,像c++中的按引用传递。
相关问答
更多-
python的参数传递问题!!![2022-03-20]
楼主的理解没有问题啊 . python中函数的实参传递规则是: 标注了参数名的就要按参数名传递,打乱顺序的情况下一定要加参数名,否则会混乱的。 没有缺省的实参情况下就会依次传递,如果不够的话,后面的会自动去取自己的缺省值。 如果实参的数量比形参要多的话,就要用到带*号的参数名了。 -
Python 的函数是怎么传递参数的?[2023-03-02]
首先你要明白,Python的函数传递方式是赋值,而赋值是通过建立变量与对象的关联实现的。 对于你的代码: 执行 d = 2时,你在__main__里创建了d,并让它指向2这个整型对象。 执行函数add(d)过程中: d被传递给add()函数后,在函数内部,num也指向了__main__中的2 但执行num = num + 10之后,新建了对象12,并让num指向了这个新对象——12。 如果你明白函数中的局部变量与__main__中变量的区别,那么很显然,在__main__中,d仍在指着2这个对象,它没有改变 ... -
python中两个函数间参数传递问题[2023-07-16]
def plus(a,b): z = a + 1 c = b + 5 return (z,c) (q,w) = plus(1,2) plud(q,w) ##我这里假设a=1,b=2 ##首先plus(1,2),得到z=2,c=7,通过return 让(q,w)=(z,c)的值,然后plud(q,w)即可实现将z,c的值传递给下一个函数 -
Python 的函数是怎么传递参数的[2024-03-21]
对象vs变量 在python中,类型属于对象,变量是没有类型的,这正是python的语言特性,也是吸引着很多pythoner的一点。所有的变量都可以理解是内存中一个对象的“引用”,或者,也可以看似c中void*的感觉。所以,希望大家在看到一个python变量的时候,把变量和真正的内存对象分开。 类型是属于对象的,而不是变量。 这样,很多问题就容易思考了。 例如: 对象vs变量 12 nfoo = 1 #一个指向int数据类型的nfoo(再次提醒,nfoo没有类型)lstFoo = [1] #一个指向list ... -
Python语言中传递参数[2021-10-09]
import sys print sys.argv[1] #保存为main.py #在控制台下输入 python main.py "hello" #就有hello打印出来了 前提是你配置好了环境变量 -
python参数传递问题[2022-08-04]
>>> total = 0 >>> >>> def sum(arg1, arg2): ... total = arg1+arg2 ... print 'inside the function total total : %s' % (total) ... return total ... >>> sum(10, 20) inside the function total total : 30 30 >>> print 'outside the function global total : %s' % (t ... -
一个lambda函数(或者更准确地说,一个lambda 表达式 )只是一个你可以在现场定义的函数,就在你需要的地方。 例如, f = lambda x: x * 2 与... 完全一样 def f(x): return x * 2 当我确切地说,我的意思是 - 他们反汇编到相同的字节码。 两者之间的唯一区别在于,第二个示例中定义的名称有一个名称。 Lambda表达式变得有用,因为创建一个不是一个声明,这意味着,正如其他人已经回答的那样,您可以这样做 print iterator(lambda x ...
-
Python函数传递参数(Python function passing parameters)[2022-02-09]
我想你只是在寻找value_counts() data['c_type'].value_counts() 准确提供您所描述的内容。 示例 : >>> data b_type c_type 0 d b 1 d a 2 d a 3 c a 4 c a 5 d b 6 c a 7 d b 8 c b 9 c a ... -
如果您考虑将名称标签附加到对象,而不是将对象填充到命名框中,Python会更有意义。 def lala(a): n = [0, 0 , 0] a = n 这是正在发生的事情。 您正在接收参数(在本例中为列表)并为其指定名称a 。 您正在创建一个新列表并将其命名为n 。 您将给出名为n的附加名称的列表a 。 两个名称a和n都是lala函数的本地名称,因此它们在函数结束时“到期”。 您在函数中创建的列表现在没有名称,Python会丢弃它。 换句话说, a不是可以放入新列表的框。 这是您给出的名 ...
-
show_double(value)是一个函数调用,参数是value 。 你主要调用show_double这种方式从主函数。 def show_double(number):这基本上是函数defing从那个特定功能开始的地方。 你可以从其他地方像从主函数那样调用它。 number参数使您可以用任何具体的值调用该函数,因此它不会被硬编码,也不会使用全局变量。 在这种特殊情况下,您将传递值5以进行打印,但在另一个函数调用中,这可能与6,7,10等任何值类似。 基本上,这样你可以使你的打印灵活。 在你的代码中,主 ...