# 列表中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推
# list comprehension
[i for i in range(10)]
# 元组与列表类似,不同之处在于元组的元素不能修改
# truple generator
(i for i in range(10))
# 字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中
# dict comprehension
{k:1 for k in range(10)}
def my_range(n):
i = 0
while i != n:
i += 1
yield i
r = my_range(10)
for i in r:
print(i)
while True:
try:
i = next(iter_obj)
except StopIteration:
break
class Pow2(object):
def __init__(self, max):
self.max = max
self.n = 0
def __iter__(self):
self.n = 0
return self
def __next__(self):
if self.n < self.max:
self.n += 1
return 2 ** self.n
else:
raise StopIteration
p = Pow2(10)
for i in p:
print(i)
# instance method
a = A() a.foo() a.bar()
# class method bind class
# static method
class A(object):
@staticmethod
def s_foo():
pass
@classmethod
def c_foo(cls):
pass
def foo(self):
pass
a = A()
a.foo()
A.c_foo()
# 深拷贝
from copy import deepcopy
l1 = []
l2 = deepcopy(l1)
l1.append(1)
print(l2)
# 浅拷贝
l1 = [1, [1, 2], 3]
l2 = l1[:]
def foo(a=[]):
a.append(1)
print(a)
foo()
foo()
import functools import operator mul2 = lambda x: 2 * x print(mul2(3)) print(list(map(lambda x: 3 * x, [1, 2, 3, 4]))) print(list(filter(lambda x: x % 3 == 0, [1, 2, 3, 4]))) print(functools.reduce(operator.add, [1, 2, 3, 4, 5], 5))
# 例子一 def greeting(msg): def hello(name): print(msg, name) return hello h = greeting("welcome") h("akira") # 例子二 l = [] for i in range(10): def _(i=i): print(i) l.append(_) for f in l: f()
def log(*args, **kwargs):
print("args", args)
print("kwargs", kwargs)
log(1, 2, 3, 4)
log(1, 2, [1, 2, 3], c=4)
# list comprehension
r1 = [i for i in range(10)]
print(r1)
# dict comprehension
r2 = {k:1 for k in range(10)}
print(r2)
# list generator
r3 = (i for i in range(10))
print(list(r3))
if debug:
xxx
else:
yyy
decorator例子
def simple_wrapper(fn):
def _():
#print(fn.__name__)
return fn()
return _
def fix_arg_wrapper(fn):
def _(x):
#print(fn.__name__)
return fn(x)
return _
def all_args_wrapper(fn):
def _(*args, **kwargs):
print(*args, **kwargs)
return fn(*args, **kwargs)
return _
@simple_wrapper
def foo():
pass
@all_args_wrapper
def bar(a, b, c):
pass
foo()
bar(1, 2, 3)
形如:
__xxx__
例子:
class LogAll(object):
def __init__(self):
self.a = 1
self.b = 2
self.c = 3
def __getattribute__(self, item):
print(item)
l = LogAll()
print(l.a)
l.a = 1
l.b
l.c
class Any(object):
def __getattr__(self, item):
print(item)
def __setattr__(self, key, value):
print("set", key, value)
a = Any()
a.a
a.a = 1
class Any2(object):
def __getattr__(self, item):
def _(*args, **kwargs):
print("function name", item)
print("args", args)
print("kwargs", kwargs)
setattr(self, item, _)
return _
a = Any2()
a.a1(1, 2, 3)
a.a2(1, 2, [1, 2, 3], c=[])
class A(object):
def foo(self):
print("foo")
def bar(self):
print("bar")
self.shit()
class B(object):
def shit(self):
print("shit")
class C(A, B):
pass
c = C()
c.bar()
new_x = str_x[::-1]
i = 2
print ++i //2
print -+i //-2
print +-i //-2
print --i //2
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def isSameTree(self, p: 'TreeNode', q: 'TreeNode') -> 'bool':
if p is None and q is None:
return True
elif p is not None and q is not None:
if p.val == q.val:
return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
else:
return False
else:
return False
top_element = stack.pop() if stack else '#'
相当于
if stack:
top_element = stack.pop()
else:
top_element = '#'