py2

函数相关的

# 生成器相关的
#
例1 ll = sum(i for i in range(100000000)) #生成器占资源少 # 例2 def demo(): for i in range(4): yield i g = demo() g1 = (i for i in g) g2 = (i for i in g1) print(list(g1)) #取值1次结束 print(list(g2)) # 例3 def add(n,i): return n+i def test(): for i in range(4): #0 1 2 3 yield i g = test() for n in [1,10]: g = (add(n,i) for i in g) #解析思路 # n=10 # g2 = (add(10,i) for i in ((add(10,i) for i in g))) #10 11 12 13 print(list(g))
# compile 将字符串类型的代码编译。代码对象能够通过exec语句来执行或者eval()进行求值
eval() 将字符串类型的代码执行并返回结果
print(eval('1+2+3+4'))

exec()将自字符串类型的代码执行
exec("1+2+3+4") #没有返回值
exec("print('hello,world')")
def print(self, *args, sep=' ', end='
', file=None): # known special case of print
    """
    print(value, ..., sep=' ', end='
', file=sys.stdout, flush=False)
    file:  默认是输出到屏幕,如果设置为文件句柄,输出到文件
    sep:   打印多个值之间的分隔符,默认为空格
    end:   每一次打印的结尾,默认为换行符
    flush: 立即把内容输出到流文件,不作缓存
    """
f = open('tmp_file','w')
print(123,456,sep=',',file = f,flush=True) #输出到文件里面

import time   #打印一个进度条
for i in range(0,101,2):
time.sleep(0.1)
char_num = i//2 #打印多少个'*'
per_str = ' %s%% : %s ' % (i, '*' * char_num) if i == 100 else ' %s%% : %s'%(i,'*'*char_num)
print(per_str,end='', flush=True)
t = (1,2,3) #hash(o) o是参数,返回一个可hash变量的哈希值,不可hash的变量被hash之后会报错。
l = [1,2,3]
print(hash(t))  #可hash  2528502973977326415
print(hash(l))  #会报错 TypeError: unhashable type: 'list'

callable(o),o是参数/函数名,看这个变量是不是可调用。 #和调用相关的
dir() 默认查看全局空间内的属性,也接受一个参数,查看这个参数内的方法或变量  #查看参数所属类型的所有内置方法

序列——列表和元组相关的:list和tuple
序列——字符串相关的:str,format,bytes,bytearry,memoryview,ord,chr,ascii,repr
序列:reversed,slice
l = (1,2,23,213,5612,342,43)
print(l)
print(list(reversed(l)))

l = (1,2,23,213,5612,342,43)
sli = slice(1,5,2)
print(l[sli])
# 匿名函数lambda
t1 = (('a'),('b')) t2 = (('c'),('d')) # 下面3种方法 dic = [{i:j} for i,j in (zip(t1,t2))] #直接打印就行 test = lambda t1,t2:[{i:j} for i,j in zip(t1,t2)] #函数 打印取值时候要调用 test = list(map(lambda t:{t[0]:t[1]},zip(t1,t2))) #直接取值赋值变量test
def multipliers():
    return [lambda x:i*x for i in range(4)] #改进的地方 是这里 []变小括号
print(list(m(2) for m in multipliers()))

# 下面是一个简单的分析
lst = []
def funcs():
    for i in range(4):
        def func(x):
            return i*x
        lst.append(func)
    return lst
print(list(k(2) for k in funcs()))
#测试递归  998  官方1000  定义:在一个函数里面调用自己本身
def foo(n):
    print(n)
    n += 1
    foo(n)
foo(1)
import sys  #修改递归最大深度
print(sys.setrecursionlimit(100000))
menu = {
    '北京': {
        '海淀': {
            '五道口': {
                'soho': {},
                '网易': {},
                'google': {}
            },
            '中关村': {
                '爱奇艺': {},
                '汽车之家': {},
                'youku': {},
            },
            '上地': {
                '百度': {},
            },
        },
        '昌平': {
            '沙河': {
                '老男孩': {},
                '北航': {},
            },
            '天通苑': {},
            '回龙观': {},
        },
        '朝阳': {},
        '东城': {},
    },
    '上海': {
        '闵行': {
            "人民广场": {
                '炸鸡店': {}
            }
        },
        '闸北': {
            '火车战': {
                '携程': {}
            }
        },
        '浦东': {},
    },
    '山东': {},
}
# def threeLM(dic):
#     while True:
#         for k in dic:
#             print(k)
#         key = input('input>>').strip()
#         if key == 'b' or key == 'q':
#             return key
#         elif key in dic.keys() and dic[key]:
#             ret = threeLM(dic[key])
#             if ret == 'q':
#                 return 'q'
# threeLM(menu)
下面是堆栈的实现 # l = [menu] # while l: # for key in l[-1]:print(key) # k = input('input>>').strip() # 北京 # if k in l[-1].keys() and l[-1][k]:l.append(l[-1][k]) # elif k == 'b':l.pop() # elif k == 'q':break
各种序列的解压
a,*_=(1,2,3,4) #a=1
*_,d=(1,2,3,4) #d=4
a,b,c = (1,2,3)
a,b,c = [1,2,3]
a,b,c = {1,2,3}
a,_b= {'name':'Ray','age':11} #a=name b=age
参数陷阱:默认参数是一个可变数据类型
def func(x,lst=[]): 列表
    lst.append(x)
    print(lst)
func('Ken') #['Ken']
func('Ray') #['Ken', 'Ray']

def func(x,dic={}): 字典
    dic.update(x)
    print(dic)
func({'k':'v'}) #{'k': 'v'}
func({'x':'m'}) #{'k': 'v', 'x': 'm'}

def func(x,dic={1}): 集合
    dic.add(x)
    print(dic)
func(2) #{1,2}
func(3) #{1,2,3}
*args  按位置传参,接收多余的参数,保存成元组形式
**kwargs 按关键字传参,接收多余的,保存成字典形式 

def 函数名(参数1,参数2,*args,默认参数,**kwargs):
        """注释:函数功能和参数说明"""
        函数体
        ……
        return 返回值
原文地址:https://www.cnblogs.com/zhangchen-sx/p/10952296.html