首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python笔记

Python笔记

作者头像
py3study
发布2020-01-16 00:34:51
3580
发布2020-01-16 00:34:51
举报
文章被收录于专栏:python3python3
  • 列表[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 i


r = my_range(10)
for i in r:
    print(i)
  • 迭代器 iterator
    • 迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退
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), 类方法(class method), 静态方法(static method)
# 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()
  • 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 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))
  • 装饰器(decorator) 可用于AOP(aspect oriential programming) 例如:
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)
  • 魔法方法(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 = 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=[])
  • 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):
    pass

c = C()
c.bar()
  • 字符串反转
new_x = str_x[::-1]
  • 关于i++ python 中的没有 i++ ,如果写了会报语法错误。 但是python 中有 --i,++i,+-i,-+i,他们不是实现-1操作的,仅仅是作为判断运算符号,类似数学中的负负得正
i = 2
print ++i  //2
print -+i   //-2
print +-i  //-2
print --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 = 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 = '#'
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-05-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档