博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python笔记
阅读量:5840 次
发布时间:2019-06-18

本文共 4672 字,大约阅读时间需要 15 分钟。

  • 列表[List] 元组(truple) 字典{dict}
# 列表中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是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)}
  • 生成器(generator)
    带有 yield 的函数在 Python 中被称之为 generator(生成器)
def my_range(n):    i = 0    while i != n:        i += 1        yield ir = my_range(10)for i in r:    print(i)
  • 迭代器 iterator
    • 迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退
while True:    try:        i = next(iter_obj)    except StopIteration:        breakclass 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 StopIterationp = Pow2(10)for i in p:    print(i)
  • 实例方法(instance method), 类方法(class method), 静态方法(static method)
# instance method a = A() a.foo() a.bar()# class method bind class# static methodclass A(object):    @staticmethod    def s_foo():        pass    @classmethod    def c_foo(cls):        pass    def foo(self):        passa = A()a.foo()A.c_foo()
  • 深拷贝 浅拷贝
# 深拷贝from copy import deepcopyl1 = []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()
  • lambda表达式, 闭包(closure)
    • lambda
    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))
    • closure
    # 例子一 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()
  • *args, **kwargs
    args获取tuple, kwargs获取kwargs
def log(*args, **kwargs):    print("args", args)    print("kwargs", kwargs)log(1, 2, 3, 4)log(1, 2, [1, 2, 3], c=4)
  • 递推式构造列表
# list comprehensionr1 = [i for i in range(10)]print(r1)# dict comprehensionr2 = {k:1 for k in range(10)}print(r2)# list generatorr3 = (i for i in range(10))print(list(r3))
  • 装饰器(decorator)
    可用于AOP(aspect oriential programming)
    例如:
if debug:    xxxelse:    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_wrapperdef foo():    pass@all_args_wrapperdef bar(a, b, c):    passfoo()bar(1, 2, 3)
  • 魔法方法(magic method)

形如:

__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 = 1l.bl.cclass Any(object):    def __getattr__(self, item):        print(item)    def __setattr__(self, key, value):        print("set", key, value)a = Any()a.aa.a = 1class 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=[])
  • Mixin模式
    例子:
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):    passc = C()c.bar()
  • 字符串反转
new_x = str_x[::-1]
  • 关于i++
    python 中的没有 i++ ,如果写了会报语法错误。
    但是python 中有 --i,++i,+-i,-+i,他们不是实现-1操作的,仅仅是作为判断运算符号,类似数学中的负负得正
i = 2print ++i  //2print -+i   //-2print +-i  //-2print --i   //2
  • 逻辑表达式

    python 中没有 && ,!, || 这3个运算符,在逻辑表达式中写成这3个会抱逻辑错误的。要实现同样的功能,要写成 and,not,or
    返回值 2 and 3 返回3
    返回值 2 or 3 返回2
    返回值 not 2 and 3 返回 False

  • if-elif-else的写法
    例如:比较两个二叉树是否相同
class TreeNode:    def __init__(self, x):        self.val = x        self.left = None        self.right = Noneclass 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 = '#'

转载于:https://www.cnblogs.com/geniusrun/p/10612795.html

你可能感兴趣的文章
redis的学习使用(ubuntu系统下)
查看>>
20135226黄坤信息安全系统设计基础期末总结
查看>>
轻松快捷创建VSFTP虚拟用户
查看>>
[转]Javascript原型继承
查看>>
[转] vue异步处理错误
查看>>
CSS 3D动画概述菜鸟级解读之一
查看>>
分布式系列文章 —— 从 ACID 到 CAP / BASE
查看>>
方法签名与方法重载
查看>>
vim
查看>>
bzoj2095: [Poi2010]Bridges(二分+混合图求欧拉回路)
查看>>
cmake 变量
查看>>
[Programming Entity Framework] 第2章 探究实体数据模型(EDM)(一)
查看>>
shell环境
查看>>
Java调用C++类库--JNI
查看>>
gles和opengl版本对照表
查看>>
微信开发(二)自己的代码
查看>>
python netwokx环境搭建
查看>>
面向空实现类继承
查看>>
1303: Decimal
查看>>
奥数 --- 找规律 + 总结
查看>>