推导式
先看一个比较简单的
求输出1-100中的偶数
这是正常情况下的代码:
result = []
# 返回0-100所有的偶数
for i in range(1, 101):
if i % 2 == 0:
result.append(i)
print(result)
下面看一下推导式的代码:
print([i for i in range(1, 101) if i % 2 == 0])
再看第二个需求,将 “键1 = 值1;键2 = 值2;键3 = 值3…” 转换为 {键1:值1;键2:值2;…}
这是正常情况下的代码:
cookie = "A=123;B=2;C=3;D=4;E=5"
new_cookie = {}
for item in cookie.split(";"): # 先用分号分隔cookie
s = item.split("=") #用=分割
new_cookie[s[0]] = s[1] # 等号左边作为键,等号右边作为值,添加到new_cookie中
print(new_cookie)
输出结果为:
下面看一下推导式的代码:
print({item.split('=')[0]:item.split('=')[1] for item in cookie.split(';')})
私有变量
和在JAVA中的private/protected/public差不多
先介绍一下private
class A(object):
def __init__(self):
self.__z = 2 # 私有属性
def __some_method(self): # 私有方法
print("私有")
在其他地方是不能使用这个私有属性和私有方法的
再看看protected
_a = 10
b = 20
在其他模块中引用
from class_name import *
时 _a被自动忽略
但是可以from class_name import _a
强制引用
自省
汉语解释:自我反省
Python的自省:Python运行的时候知道对象自身有哪些东西
class Person(object):
name = "玩意"
print(dir(Person)) # dir是自省的一种,作用查看自己有哪些属性
print(hasattr(Person, "name")) # hasattr也是自省的一种,作用查看对象有没有某个属性
使用场景举例: 一个函数中实现“检查函数参数”(类型检查,整数检查等)
def f(i):
if not isinstance(i, int):
print(f'{i}不是整数')
else:
print(f'{i}是整数')
if __name__ == '__main__':
f(1)
f(1.2)
f(1.5)
f(2)
输出结果:
常用的自省有:
dir() # python查看对象有哪些属性
hasattr() # python查看对象是否有某个属性
type() # python查看对象是什么类型
isinstance() # python查看对象是不是某个类型
id() # python查看对象的id是什么
callable() # python判断对象是不是可调用的(即是不是可以加括号调用)
help() # python查看某个对象的帮助信息
getattr() # 获得某个对象的属性
setattr() # 设置某个对象的属性