Python基础笔记(1):函数篇(1):关于函数参数

一、函数参数


1、两种对象

     python采用“对象传递(pass by object)"(Python中有一句话:一切皆为对象)

     根据传递过来的对象分为:

    a. 可变对象,可变对象可在函数内对对象所在内存地址进行值修改,list、dict......都属于可变对象。示例:

>>> L=[1,2,3,4,5]
>>> id(L) 
41630088
>>> L[0]=100
>>> L
[100, 2, 3, 4, 5]
>>> id(L)
41630088
对list对象进行修改,修改前后对象的地址没有改变 对象值改变后,引用L并未指向新的对象,而是在原有基础进行改变

               

    b. 不可变对象

                看一个简单的例子

>>> a=1
>>> id(a)
1985323456
>>> a=a+1
>>> id(a)
1985323488
>>>
不可变对象修改值是让引用指向一个新创建的对象,因此地址改变,原来的对象也被回收了


2、位置参数

        就是一般函数参数的传递,有多少参数需要什么参数就怎么传


3、默认参数

      

def sum(x,n=100):
    ...
    ...

        默认参数有一点要注意,当没有参数传入时,调用函数,其中的默认参数执行操作后并没有消失,依旧在局部函数中,而且保留了上次操作结果(对于可变对象来说)。看下面代码:

>>> def Test(L=[]):
... 	L.append('Hello')
... 	print(L)
... 
>>> Test()
['Hello']
>>> Test()
['Hello', 'Hello']
>>> Test()
['Hello', 'Hello', 'Hello']
>>>
    默认这里涉及到了前面的可变对象。函数每次调用都添加一个字符串,是因为局部函数中,L这个引用一直指向同一个list对像,不断增加字符串并不会改变地址,指向新的对象


4、可变参数

    如果传递给一个函数的参数,一会需要1一个,一会需要100个,该怎么做呢?使用默认参数能做到这样,但是未免太过于低效和麻烦了。可变参数就派上用场了,在C/C++中,scanf和printf函数就是常用的能接受可变参数的函数,C/C++其中实现的细节后面再谈,我们先看Python。示例:

def sum(*num):
	result=0
	for value in num:
		result=result+value
	return result

print(sum(1,2,3,4))</span>
在参数头加上一个“ * ”表示此函数可以传递可变参数。如果要传入一个列表:

def sum(*num):
	result=0
	for value in num:
		result=result+value
	return result

L=[1,2,3,4]
print(sum(*L))#输出结果:10
应用在lambda表达式中:

fun=lambda *num: [print(value) for value in num]  
fun(1,2,3,4)

5、关键字参数

    关键字参数像是dict和可变参数的组合,看代码:

def key_paramer(**args): #两个*号
	print(args)
	for key,value in args.items():
		print(key,':',value)

key_paramer(city='Chonqing',name='zhangsan')




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值