Python中遇到的比较纠结的问题记录-----持续更新

1.

set操作之后转换成list出现乱序问题。

In[0]:  list(set(['1','2','3','4']))

Out[1]: ['1', '3', '4', '2']

这时候只要按照之前的顺序重新排序即可:

a = ['1','2','3','4']
sorted(list(set(a)),key=a.index)

Out[1]: ['1', '2', '3', '4']

2.

一道面试题,python怎么获取动态属性的。
假设有一个student类:

class student(object):
   pass
s = student()

一般直接设置属性:

s.name='a'
print(s.name)

Out[1]: 'a'

这个问题的本质是要问python内部是怎么实现这个过程的,以下为参考答案:

s.__setattr__('name','a')
s.__getattribute__('name')

类的点语法+‘=’调用__setattr__,设置这个属性名为name,值为‘a’
直接点语法则调用__getattribute__,获取这个属性值。

3.

python中以下划线开头的变量或方法有什么特殊定义:
_xxx:这样的对象叫做保护变量,不能用from module import 导入,只要类对象和子类对象能访问这些变量。
__xxx__:是系统定义的特殊成员的名字。
__xxx:类中的私有变量,只要类对象自己能访问,子类对象也不能访问,但是再对象外部可以通过“对象名._类名__xxx”这样的特殊方式来访问,python中没有纯粹的C++意义上的私有成员。

4.

“del”能删除一个元组中的元素吗?
答:元组对象不支持item deletion
但是数组可以使用del a[index]删除其中的元素

5.

从一个列表list中,每三个元素取一个:

a = [1,2,3,4,5,6,7,8,9]
a[::3]

Out: [1, 4, 7]

拓展:a[::-1]将列表a元素逆序操作。

6.

在python 中 is和== 的区别,is not 和 != 的区别:
Python中的对象包含三要素:id、type、value
其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值
is,is not判断的是a对象是否就是b对象,是通过id来判断的;
==,!= 判断的是a对象的值是否和b对象的值相等,是通过value来判断的。

a = 1
b = 1.0

a is b
Out: False

a == b
Out: True
id(a)
Out: 1661716208

id(b)
Out: 2386128332624

拓展:由于两个方式比较不同,他们速度也不同,is 和 is not比较的是指针,于是速度就比 == 、!=快。

7.

猜你喜欢

转载自blog.csdn.net/u011094454/article/details/79018263