Python学习之路上的几个经典问题

1、python有三元运算符语法(类似C语言的”?”)么?

语法如下:
[on_true] if [expression] else [on_false]
如果[expression]为True,则表达式的值为[on_true],否则为[on_false]。

示例如下:

1
2
3
4
>>> x, y = 50, 25
>>> small = x if x < y else y
>>> small
25

2、python判断list是否为空的最佳方法?

使用not判断list是否为空,是相当pythonic的方法。

示例如下:

1
2
3
4
5
>>> a = []
>>> if not a:
print('List is empty')
List is empty

3、python循环时如何得到当前值的数字索引?

使用一个额外的状态变量是相当non-pythonic的,更好的方法是使用enumerate()这个内置函数。

示例如下:

1
2
3
4
5
6
7
8
>>> L = ['A', 'B', 'C', 'D']
>>> for idx, val in enumerate(L):
print idx, val
0 A
1 B
2 C
3 D

4、python将字符串”666.66”转换成数字?

转换成float可以用float(“666.66”),转换成int可以用int(float(“666.66”))。

示例如下:

1
2
3
4
5
>>> n = "666.66"
>>> float(n)
666.66
>>> int(float(n))
666

5、python怎样得到list的长度(元素数量)?

len()函数可以用在python的许多类型(例如list,dict,set,string等)用来计算长度。

示例如下:

1
2
3
4
5
6
7
8
>>> len([1,2,3])
3
>>> len((1,2,3))
3
>>> len({'1':'A','2':'B','3':'C'})
3
>>> len('123')
3

6、如何知道一个对象(变量)的类型?

type()内置函数可以用来得到一个对象(变量的)类型。

示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
>>> type([]) is list
True
>>> type({}) is dict
True
>>> type('') is str
True
>>> type(0) is int
True
>>> type({})
<type 'dict'>
>>> type([])
<type 'list'>

type()函数也可以用来获得自定义的类型。

示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
>>> class Test1 (object):
pass
>>> class Test2 (Test1):
pass
>>> a = Test1()
>>> b = Test2()
>>> type(a) is Test1
True
>>> type(b) is Test2
True

但是,要注意type()函数只会告诉你对象(变量)的直接类型,不会告诉你继承自什么类型。

示例如下:

1
2
>>> type(b) is Test1
False

为了解决上述无法知道继承自什么类型的问题,可以用isinstance()函数,它也可以作用在内置类型(例如list,dict等)上。

示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
>>> isinstance(b, Test1)
True
>>> isinstance(b, Test2)
True
>>> isinstance(a, Test1)
True
>>> isinstance(a, Test2)
False
>>> isinstance([], list)
True
>>> isinstance({}, dict)
True

7、python项目目录中的__init__.py文件有什么用?

__init__.py文件的作用是把所在目录当作一个package处理,这样才可以把所在目录下的py文件作为模块导入,通常__init__.py文件为空。

8、python反转一个字符串或列表?

这就用到了python的强大的切片语法:[ begin:end:step ]
当 step > 0 时,切片从 begin(含begin)处开始,到 end(不含end)处结束,方向从左向右,每隔 step - 1(索引之间差值仍为 step,但相隔元素是 step - 1 个)个元素进行一次截取。
当 step < 0时,方向正好相反,从右向左。

示例如下:

1
2
3
4
>>> 'ABCDEF'[::-1]
'FEDCBA'
>>> ['A','B','C','D','E','F'][::-1]
['F', 'E', 'D', 'C', 'B', 'A']

9、python根据索引删除list中元素?

del关键字删除list中元素。

示例如下:

1
2
3
4
5
6
>>> L = range(10)
>>> L
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> del L[-1]
>>> L
[0, 1, 2, 3, 4, 5, 6, 7, 8]

10、python如何复制list?

注意:new_list = old_list 你并没有2个list,用=创建的list只是old_list的引用,所以当你修改其中一个list时,另一个也会同步修改。
复制list的方法如下:

  • 使用切片:new_list = old_list[:]
  • list()函数:new_list = list(old_list)

示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>> old_list = ['A','B','C']
>>> new_list = old_list
>>> del new_list[-1]
>>> old_list
['A', 'B']
>>> old_list = ['A','B','C']
>>> new_list = old_list[:]
>>> del new_list[-1]
>>> old_list
['A', 'B', 'C']
>>> old_list = ['A','B','C']
>>> new_list = list(old_list)
>>> del new_list[-1]
>>> old_list
['A', 'B', 'C']

11、Python判断变量是否存在

方法一:使用try: ... except NameError: ...

1
2
3
4
5
6
try:
var
except NameError:
var_exists = False
else:
var_exists = True

方法二:使用locals()globals()两个内置函数。
locals() : 基于字典的访问局部变量的方式。键是变量名,值是变量值。
globals() : 基于字典的访问全局变量的方式。键是变量名,值是变量值。

1
var_exists = 'var' in locals() or 'var' in globals()

12、Python判断对象是否有某属性

hasattr(object, name)判断object对象是否有属性name。

1
2
if hasattr(obj, 'attr_name'):
# obj.attr_name exists.
大师兄 wechat
欢迎关注我的微信公众号:Python大师兄