1、使用pip安装包时如果报错,不能安装可以尝试用如下方式:
pip3 install wheel
pip3 install C:\Users\39098\Desktop\PyYAML-5.1-cp36-cp36m-win_amd64.whl
2.python解析yaml
, Loader=yaml.FullLoader
解析yaml时,用方法data = yaml.load(rd)解析数据时异常:YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
处理方式(已经验证):
data = yaml.load(rd, Loader=yaml.FullLoader)
主要原因:
yaml 5.1版本后弃用了yaml.load(file)这个用法,因为觉得很不安全,5.1版本之后就修改了需要指定Loader,通过默认加载器(FullLoader)禁止执行任意函数
解决方式:
1.yaml.load(f, Loader=yaml.FullLoader)
2.yaml.warnings({'YAMLLoadWarning': False}) # 全局设置警告,不推荐
Loader的几种加载方式
BaseLoader--仅加载最基本的YAML
SafeLoader--安全地加载YAML语言的子集。建议用于加载不受信任的输入。
FullLoader--加载完整的YAML语言。避免任意代码执行。这是当前(PyYAML 5.1)默认加载器调用
yaml.load(input)(发出警告后)。
UnsafeLoader--(也称为Loader向后兼容性)原始的Loader代码,可以通过不受信任的数据输入轻
getattr(object, name[, default]):
object --对象,name --属性,default --默认返回值,如果不提供默认参数,如果提供的属性不存在,会出发AttributeError
eg:
class A(object):
bar = 1
a= A()
getattr(a, 'bar') #获取属性bar值
1
getattr(a, 'bar2') #属性bar2不存在,触发异常
getattr(a, 'bar2', 3) #属性bar2不存在,但是设置了默认值
3
hasattr(object, name):
object -- 对象,name -- 字符串,函数用于判断对象是否包含对应的属性,有该属性返回 True,否则返回 False。
格式化输出:
使用%格式化:print("名字是:%s, 年龄是:%d" %(self.name, self.age))
使用format格式化:
1、带数字编号,可以调换顺序:print('{1} {1} {0}'.format('hello','world')) ->world world hello
2、带关键字:print('{a} {tom} {a}'.format(tom='hello',a='world')) -> world hello world
3、不带编号,按顺序:print('{} {}'.format('hello','world')) -> hello world
函数的参数中有不定长参数(*args)时,当向参数传多个值时,会把传入的参数全部列出来,如:
def demo(arg_f, *args):
print("这是arg_f:" + arg_f)
for i in args:
print("这是不定长参数:" + i)
demo("a", "b", "c", "d")
输出结果为:
这是arg_f:a
这是不定长参数:b
这是不定长参数:c
这是不定长参数:d
函数的参数为关键字参数时,当传入的参数为多个键值对时,会全部打印出来,如:
def key_value_demo(**kwargs):
for k, v in kwargs.items():
print(k + "值为:" + v)
key_value_demo(name="ls", age=18, sex="man")
输出结果为:
name值为:ls
age值为:18
sex值为:man
lst = [1, 2, 3, 4, 5]
def fn(x):
return x ** 2
res = list(map(fn, lst))
print(res)
lt = [i for i in res if i > 10]
print(lt)
注:如果不用list转换map生成的对象,直接打印res,返回的是map的一个对象,打印出来的是内存地址,需要用list做一个转换,才能打印出来相应的数据
__slots__ = ("a","b"):用来限制当前类及其实例的属性,除了给定的属性之外,在添加属性时,会报一个没有该属性的错误(也可以用:__slots__ = ["a","b"])。但是只能针对当前类及其属性,对于子类及子烈的实例是不起作用的。使用这个方法的优点是:1、可以提高访问速度,2、减少内存的使用
__str__(self):在方法中使用了print输出对象时,只要自定义了__str__(self):,那么打印出来的信息是__str__(self):方法中return出来的数据
如果类中有其他方法,对象调用具体的方法时,输出的还是被调用方法中的信息,如果不调用某个具体的方法,直接打印类的某个初始化对象,则打印出来的信息是__str__(self):return中的信息。
__new__(cls):创建一个类的实例化对象,必须要有一个返回值,返回实例化出来的实例,然后在由__init__(self):做初始化的操作
Python中常见的数据结构可以统称为容器(container)。序列(如列表和元组)、映射(如字典)以及集合(set)是三类主要的容器。所以,Python常用数据结构有:列表、字典、元组、集合。
可变/不可变是针对该对象所指向的内存中的值是否可变来判断的。如可变类型的数据类型有:列表、字典、集合;不可变类型的数据类型有:字符串、元组、数字
赋值是将一个对象的地址赋值给一个变量,让变量指向该地址(旧瓶装旧酒)
浅拷贝就是对引用的拷贝
深拷贝是对对象的资源的拷贝
Python会把所有的空数据结构视为假,比如[](空列表)、{}(空集合)、''(空字符串)等,而与之相反的非空数据结构即为真
pip freeze
python豆瓣源安装库:
安装Redis依赖库
pip install django-redis -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
pip install django-redis-cache -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com