内置属性
1、__file__
在pycharm中,__file__会返回当前文件的绝对路径,而在终端直接运行时,则返回的是文件本身(这是个坑。。在IDE开发的时候运行正常,上线就出问题)。
pycharm:print(__file__) # F:/test_demo/demo.py
终端: python demo.py # 会输出 demo.py
所以要使用绝对路径的话,推荐使用 os.path.abspath(__file__),这种写法在终端与pycharm中输出的都是绝对路径
2、__name__
表示当前模块的名称,如果为main,表示为顶层模块,能够调用其他非main的模块,并且可运行。如果为非main,则无法运行,只能用来做导入使用(相信大多数同学都试过,在启动项目时,通常只有入口文件可以启动,单独运行项目中其他某个py文件,是无法运行的,而且,在入口文件中,不能存在相对导入包的方式,就是因为该文件为顶层模块,而项目的其他py文件可以存在相对导包的方式)。
还可以用来返回类、实例、函数名等(这个没啥用~,了解即可):
class B:
pass
print(B.__name__) # B
def a():
pass
print(a.__name__) # a
3、__class__
返回所在的类。
用法:实例或者函数.__class__,
如果是类名.__name__则返回元类 ‘type’(以后会写一篇关于元类的帖)
4、__doc__
返回注释信息(注意,必须是三引号的注释,其他类型的注释不会被识别进行返回)
def a(a,b):
"""
this is a demo test
:param a:
:param b:
:return:
"""
c = a + b
return c
print(a.__doc__) # 输出如下
# this is a demo test
# :param a:
# :param b:
# :return:
5、__dict__
以字典形式返回对象的全部属性和方法
class A(object):
def show(self):
pass
print(A.__dict__) # {'__module__': '__main__', 'show': <function A.show at 0x0021C6F0>,.....
6、__base__
返回父类(没啥可说的)
7、__mro__
返回继承顺序:
class B(object):
pass
class A(B):
pass
print(A.__mro__) # (<class '__main__.A'>, <class '__main__.B'>, <class 'object'>)。
如果只是单继承,继承层次不深的话很好理解,但其实并不是单纯的从下到上的顺序,感兴趣的同学可以去了解一下,这里就不展开了。
8、__metaclass__
元类,以后会单独开一篇。
内置函数
先说一下函数与方法的区别(我真是想起什么来说什么- -)。。初学的话,应该都想过函数跟方法有什么区别,毕竟它们的相似度有目共睹。。
直接上代码:
class B(object):
def demo(self):
pass
def second_demo(self):
pass
def demo():
pass
def second_demo():
pass
print(demo) # <function demo at 0x005D6BB8>
print(second_demo) # <function second_demo at 0x006129C0>
print(B.demo) # <function B.demo at 0x0027C6F0>
print(B.second_demo) # <function B.second_demo at 0x00612978>
b = B()
print(b.demo) # <bound method B.demo of <__main__.B object at 0x002BC4D0>>
print(b.second_demo) # <bound method B.second_demo of <__main__.B object at 0x00611290>>
通过上面可以看到,每个普通函数、类方法、实例方法之间的内存地址是各不相同的
其次,在同一个类下的方法是共用一片内存空间(就是这个类的内存空间)。当一个方法修改或产生一个变量后,其他方法也能够使用到这个变量,这个变量不会消失,而函数之间则是完全独立的。
最后注意:只有实例调用的才叫方法!!类名直接调用本身还是进行的函数调用。
进入正题。。。
鉴于篇幅太长,有的同学看不下去,此处只举比较简单的函数。有几个比较重要的函数另开篇单独写。
1、zip函数
可将2个可迭代对象同时进行遍历。
lst = [1,2]
lst2 = [3,4]
for item1, item2 in zip(lst, lst2):
print("item1:{}, item2:{}".format(item1, item2))
# item1:1, item2:3
# item1:2, item2:4
注意,(1)zip遍历的次数根据2个可迭代对象中元素较少的选取。也就是说如果lst2=[3],则只循环一次。
(2)2个可迭代对象可以是不同类型,比如同时遍历一个列表与元组
2、dict函数
构建字典
3、abs函数
返回number 的绝对值
语法:abs(number)
4、all函数
判断某个可迭代对象里是否全部为真
语法:all(iteratble)
print(all([1,2,3,4])) # True
print(all([1,2,3,0])) # False
5、any函数
iterable里任一元素为真则为True
语法:any(iterable)
6、callable函数
判断对象是否为可调用对象,是则返回True,否则返回False。(返回真,可能调用失败,返回假,则肯定调用失败)
7、dir函数
返回obj的全部属性和方法,如果对象为实例或类对象,则递归找到基类的属性(类似上面的__dict__)
语法:dir([obj])
8、help函数
返回对象的详细信息。非常强大
语法:help(obj)
9、pow函数
返回x的y次幂,如果z存在,则对z取余,(比直接 pow(x, y) % z
计算更高效)
语法:pow(x,y[,z])
注意:10**2 = 100 ,10**-2 = 0.01。**是幂运算
10、round函数
返回num舍入小数点后n位精度的值
语法:round(num,[,n]),
如果本篇文章对你有帮助,可否在文章右侧点个赞再走呢~~
本文为原创,转载请注明出处
python 如何避免大量的if else