python中 什么意思_Python里面的这几个梗,你能回答出来吗

原标题:Python里面的这几个梗,你能回答出来吗

初学者学习Python的时候,会有一些梗非常不适应,这些是Python特有的地方,今天我罗列出一些,希望对初学者有帮助!

1.Python中多重循环如何退出

比如我们在进行嵌套循环的时候,需要立刻退出,用break是不行的:

deffun():

fori inrange(3):

fori inrange(10,13):

print("inner:",i)

ifi==12:

break

print('outter:',i)

print('end')

fun()

如果有其他语言基础的同学,会想当然的认为break就退出来啦!但是Python不行,看答案:

>>

inner: 10

inner: 11

inner: 12

outter: 12

inner: 10

inner: 11

inner: 12

outter: 12

inner: 10

inner: 11

inner: 12

outter: 12

end

解决的办法:直接return或者加变量控制

deffun():

fori inrange(3):

fori inrange(10,13):

print("inner:",i)

ifi==12:

return

print('outter:',i)

print('end')

fun()

2.列表删除里面的坑

前段时间小密圈同学问我,比如我们有一个列表里面有多个相同的值,假如:nums=[1,6,6,3,6,2,10,2,100],我想去掉6,可以这样写:

nums=[1,6,6,3,6,2,10,2,100]

forn in nums:

ifn==6:

nums.remove(n)

nums.sort()

print(nums)

结果答案会让你大跌眼镜:

>>[1, 2, 2, 3, 6, 10, 100]

怎么还有一个6啊,有没有搞错啊,完全不理解,特别是新手很不理解这样的结果。我们慢动作细细分解:

nums=[1,6,6,3,6,2,10,2,100]

print(id(nums))

forindex,num in enumerate(nums):

print('index :{},num:{}'.format(index,num))

ifnum==6:

print('before:',nums,id(nums))

nums.remove(num)

print('after:',nums,id(nums))

print('final:',nums)

>>

index :0,num:1index :1,num:6before: [1, 6, 6, 3, 6, 2, 10, 2, 100] 4488883848after: [1, 6, 3, 6, 2, 10, 2, 100] 4488883848index :2,num:3index :3,num:6before: [1, 6, 3, 6, 2, 10, 2, 100] 4488883848after: [1, 3, 6, 2, 10, 2, 100] 4488883848index :4,num:10index :5,num:2index :6,num:100final: [1, 3, 6, 2, 10, 2, 100]

解释:

1).整个列表的地址是没有变的,4488883848其实就算列表的内存地址2).我加了enumerate,这样可以放慢看仔细,列表的下标的变化3).第一次循环到6的时候,也就算index=1的时候,发生了del,这个时候nums变成了[1, 6, 3, 6, 2, 10, 2, 100] 4).接着循环index=2,如果列表的长度没有变化,没有删除,只是应该index=2 取到的第二个6,但是因为前面remove了一次,所以这个时候的index=2,实际上对应的是35).接着循环到index=3,这个时候列表里面对应的是6,这个6其实就是3后面的66).但是这个时候nums=[1, 6, 3, 6, 2, 10, 2, 100], nums.remove(6)的时候,它只会搜索到第一个匹配的,也就算1后面的6,所以最后的结果是 [1, 3, 6, 2, 10, 2, 100]

3.神奇的闭包

大家都知道函数里面的变量使用完成之后,都是消失,除非你是全局变量。但是神奇的Python里面有一个功能,可以记住父函数的内容,仿佛有记忆功能,比如:

c05ab26461d341dcb8294f15ddf39ad2.jpeg

>>

base: 10

Base:10,add:1

11

Base:10,add:2

12

解释:我们在init_nums会返回一个闭包的函数地址,这个函数有记忆功能,能记住在父函数里面的base_num的值,这一特性在某些地方非常有用!

4.深浅拷贝区别

1).浅拷贝

一般使用copy.copy(),可以进行对象的浅拷贝.它复制了对象但对于对象中的元素,依然使用原始的引用.

741a703cee504b3a86a83e430ea31ef3.jpeg

使用copy对a进行浅拷贝,b复制了a的对象,但是b里面的[2,3,4]和a里面的[2,3,4]其实都是指向同一块内存地址,所以改变了a[1]之后,b里面的b[1]也发生了改变!

2).深度拷贝

深度拷贝需要用copy.deepcopy()进行深拷贝。它会复制一个容器对象,以及它里面的所有元素(包含元素的子元素)

9da77ad862ef4ee3bda1c91fd2a02882.jpeg

当对a列表进行深度拷贝之后,b复制了a的对象,但是b里面的[2,3,4]和a里面的[2,3,4]其实都是指向不同的内存地址.

a[1].append(5) print (a) print (b)>> [1, [2, 3, 4, 5]]#因为是深度拷贝,改变了a[1],b[1]内容不会改变 [1, [2, 3, 4]]

5.一切皆对象

如果你遇到下面的代码,不要怀疑写错了,先看一下:

1).函数可以当变量传递

deftest_fun():

print('This is test fun!')

x=test_fun

x()

>>

This is test fun!

deftest_fun():

print('This is test fun!')

x=test_fun

defdo_something(y):

y()

do_something(x)

2).类也是一样的

classHi:

defsay_hi(self):

print('Hi leo!')

hi=Hi

hello=hi()

hello.say_hi()

Python里面一些皆对象,变量,任何函数方法,类统统都是对象,都是一类公民,都可以自由进行任何操作,这一点要注意。

上面这几个是Python和其他语言不太一样的地方,希望对初学者有帮助,Python还要很多好玩的技巧和语法,后面会继续讲解!返回搜狐,查看更多

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值