一.python中and, or, and-or语法
1.and 有假先出假
在Python 中,and 和 or 执行布尔逻辑演算,如你所期待的一样,但是它们并不返回布尔值;而是,返回它们实际进行比较的值之一。
在布尔上下文中从左到右演算表达式的值,如果布尔上下文中的所有值都为真,那么 and 返回最后一个值。
如果布尔上下文中的某个值为假,则 and 返回第一个假值.
0, '' , [] , {}都是假
>>> 'a' and 'b' 'b' >>> '' and 'b' '' >>> 'a' and 'b' and 'c' 'c' >>> True and False False
2.or 有真先出真
使用 or 时,在布尔上下文中从左到右演算值,就像 and 一样。如果有一个值为真,or 立刻返回该值
如果所有的值都为假,or 返回最后一个假值
注意 or 在布尔上下文中会一直进行表达式演算直到找到第一个真值,然后就会忽略剩余的比较值
>>> 'a' or 'b' 'a' >>> '' or 'b' 'b' >>> '' or [] or {} {} >>> 0 or 'a' or 'c' 'a'
3.and-or:
类似三目运算:"(a<b)?a:b"是一个"条件表达式",它是这样执行的: 如果a<b为真,则表达式取a值,否则取b值.
这个语法看起来类似于 C 语言中的 bool ? a : b 表达式。整个表达式从左到右进行演算,所以先进行 and 表达式的演算。 1 and 'first' 演算值为 'first',然后 'first' or 'second' 的演算值为 'first'。
0 and 'first' 演算值为 False,然后 0 or 'second' 演算值为 'second'。
and-or主要是用来模仿 三目运算符 bool?a:b的,即当表达式bool为真,则取a否则取b。
and-or 技巧,bool and a or b 表达式,当 a 在布尔上下文中的值为假时,不会像 C 语言表达式 bool ? a : b 那样工作。
>>> a='first' >>> b='second' >>> 1 and a or b 'first' >>> (1 and a) or b 'first' >>> 0 and a or b 'second' >>> (0 and a) or b 'second' >>>
4.安全使用and-or
>>> a="" >>> b="second" >>> (1 and [a] or [b]) [''] >>> (1 and [a] or [b])[0] '' >>>
由于 [a] 是一个非空列表,所以它决不会为假。即使 a 是 0 或者 '' 或者其它假值,列表 [a] 也为真,因为它有一个元素。
一个负责的程序员应该将 and-or 技巧封装成一个函数:
def choose(bool,a,b): return (bool and [a] or [b])[0] print choose(1,'','second') #''
二.python中filter()函数
filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。
三.python中的map()函数
四.python中的sort()函数
五.什么是lambda函数?它有什么好处?
lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数
lambda函数:首要用途是指点短小的回调函数
lambda [arguments]:expression
>>> a=lambdax,y:x+y
>>> a(3,11)
五.Python-copy()与deepcopy()区别
浅拷贝是对于一个对象的顶层拷贝 通俗的理解是:拷贝了引用,并没有拷贝内容
深拷贝是对于一个对象所有层次的拷贝(递归)
深拷贝和浅拷贝 都会给自己开辟一片空间存储数据
不同点:
浅拷贝---只是开辟了最底层的一片空间 然后拷贝顶层引用
深拷贝---完全的把数据复制过来 开辟新的空间去存储数据 实现了数据的独立性
切片拷贝 : 浅拷贝
字典的拷贝 : 浅拷贝
不可变类型(元组)----深拷贝浅拷贝都不会开辟空间了
注意点:
浅拷贝 不管元组中的数据是什么 都不会开辟空间
深拷贝 只要数据含有可变的类型 都会开辟空间进行递归拷贝
可变类型 Vs 不可变类型
可变类型(mutable):列表,字典
不可变类型(unmutable):数字,字符串,元组
这里的可变不可变,是指内存中的那块内容(value)是否可以被改变
copy.copy对于可变类型,会进行浅拷贝
对于不可变类型,不会拷贝,仅仅是指向
03 私有化
_xxx 防止被导入
私有属性并非不可被外部访问
xxx_ 解决关键字重名的问题
04 import的导入
import xxx
import xxx,yyy
from xxx import *
from xxx import yyy
from xxx import yyy,zzz
import xxx as yyy
1 a.py
2 import a as b
b.xxx
a = 10
路径问题 import sys
sys.path
sys.path.insert(0,"xxx")
模块重复导入的问题
from imp import reload
多模块开发的时候 导入公共变量
import
05 多态的发生条件
1.发生继承
2.方法重写
3.调用被重写的方法
同一种形式 产生了不同的状态
01_多继承
1 父类名字.父类的方法 (需要self)
2 super().父类的方法 (不需要self)
1 浪费资源,造成bug
2 不会重复调用父类 __mro__顺序表
结论: 使用多继承的时候 使用super()
02_类中的各种概念
类对象 存放类相关的数据空间
实例对象 存放实例相关的数据的空间
类属性 存放在类空间中的属性
实例属性 存放在实例空间中属性
类方法 改变类属性的(默认就是类空间地址)
实例方法 改变实例属性
静态方法 谁也改变不了
实例对象可以调用类方法
03_property属性
定义的时候像函数一样 使用的时候像属性一样
作用: 简化 私有属性的修改 调用 的流程
其他资料:
https://www.cnblogs.com/tom-gao/p/6645859.html