自学python碎碎念(一)

1.函数传参

对于函数的传参而言,在python中我们是无法选择传参还是传递引用。如果传递的是列表,字典,则会默认为传引用。即在函数内部对参数进行修改后,则参数对应的原始对象也会被修改,反之若传入的参数为整数,字符串等内容,则不会被修改。
如果希望禁止函数修改列表,则可以对列表运用切片表示法创建列表副本如下

function_name(list_name[:])

2.列表中元素批量修改

关于对列表中元素进行批量修改的时候,要格外注意以下两种写法,其中第一种的修改过后对于列表中的元素不会进行修改,而第二种可以做到。要分情况注意使用!

for magician in magicians:
        magician='the great '+magician
        #这种更改方法是错误的
n=len(magicians)
    for i in range(n):
        magicians[i]='the great '+magicians[i]
        #这种更改方法是正确的

3.关于函数中**参数的个人理解

在python编程:从入门到实践一书中,给出的定义是:

形参**user_info中的两个星号让Python创建一个名为user_info的空字典,并将收到的所
有名称—值对都封装到这个字典中。在这个函数中,可以像访问其他字典那样访问user_info中的
名称—值对。

这样看可能还不是很清晰,我们引入书上代码:

def build_profile(first, last, **user_info): 
 """创建一个字典,其中包含我们知道的有关用户的一切""" 
profile = {} 
profile['first_name'] = first 
profile['last_name'] = last 
for key, value in user_info.items(): 
 	profile[key] = value 
 	return profile 
user_profile = build_profile('albert', 'einstein', 
 location='princeton', 
 field='physics') 
print(user_profile)

输出的结果为:

{‘first_name’: ‘albert’, ‘last_name’: ‘einstein’,
‘location’: ‘princeton’, ‘field’: ‘physics’}

在我自己写代码时,会发现如下情况,如果后面的**参数直接引用字典dict类型是会报错的,报错内容如下

TypeError: build_a_person() takes 2 positional arguments but 3 were given

报错时的源代码如下:

def build_a_person(first_name,last_name,**other_data):
    person={}
    person['first_name']=first_name
    person['last_name']=last_name
    for key,value in other_data.items():
        person[key]=value
    return person
people={
    'age':18,
    'country':'China'
}
people=build_a_person('Wang','Yu hao',people)
print(people)

而如果希望代码不报错,除了按照书上写法外,也可以这样进行修改:

def build_a_person(first_name,last_name,**other_data):
    person={}
    person['first_name']=first_name
    person['last_name']=last_name
    for key,value in other_data.items():
        person[key]=value
    return person
people={
    'age':18,
    'country':'China'
}
people=build_a_person('Wang','Yu hao',other_data=people)
print(people)

而对于书中代码和上面代码输出的结果是不同的,输出结果为:

{‘first_name’: ‘Wang’, ‘last_name’: ‘Yu hao’, ‘other_data’: {‘age’: 18, ‘country’: ‘China’}}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值