tuple所谓的“不变”是说,tuple的每个元素,指向永远不变

“可变的”tuple    
t = (1,[2,3])     
t[1][1]='4'     
print(t);        
# (1, [2, '4'])    

要定义一个只有1个元素的tuple 
因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1。
t = (1);
print(t) # 1 被当作括号

所以,只有1个元素的tuple定义时必须加一个逗号,,来消除歧义   
t = (1,) #  (1,)
   
% 格式化字符串  
%s表示用字符串替换,%d表示用整数替换,%f表示浮点数, 
%+显示正负号,%-左对齐,%0 补零,%[-+0宽度.精度]
print('%0+7.2f' %(1.123456)) 7位,小数点后取2位,不够补0,前面使用了正负号    
# +001.12   


set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
print(set([1,2,2,2,2,3,4,5]))
# {1, 2, 3, 4, 5}   

      
定义函数时,需要确定函数名和参数个数;    
如果有必要,可以先对参数的数据类型做检查;    
函数体内部可以用return随时返回函数结果;     
函数执行完毕也没有return语句时,自动return None。     
函数可以同时返回多个值,但其实就是一个tuple。 

def hello(x = 1,y = 2, *o) :  # *x 可变参数    
    '函数说明'
    pass
    return x, y

print(hello(3,4));
 # (3, 4)    


def world (l = []) :    # 默认参数指向对象的问题    
    l.append('hello');    
    return l;      
print(world())     
print(world())    
# ['hello']
# [‘hello', 'hello']   

def world (l = None) :       
    if l is None :   
        l = []     
        l.append('hello')    
    return l    
print(world())         
print(world())       
# ['hello']      
# ['hello']   


关键字参数
函数的调用者可以传入任意不受限制的关键字参数。至于到底传入了哪些,就需要在函数内部通过kw检查      
def hello(x = 1,y = 2, **o) :  # **o 关键字参数           
    '函数说明'      
    if 'name' in o :    
        print (o['name'])     
    return    

hello(3,4, name = 'leyi')  
# leyi

命名关键字参数
如果要限制关键字参数的名字,就可以用命名关键字参数,
和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数 , 如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了,如果没有可变参数,就必须加一个*作为特殊分隔符    

def hello(x = 1,y = 2, *, name) :  # *之后的name 为命名关键字参数
    '函数说明'    
    print(name)     
    return    

hello(3,4, name = 'leyi')     
# leyi              
        
      
匿名函数  
l = lambda x, y : x *y       
print(l(2,3))    
# 6    

装饰器   
在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator),
本质上,decorator就是一个返回函数的高阶函数      

def middleFunction (fn) :        
    def wrapper(*args) :    
        print("插入的功能", fn.__name__)        
        return fn(*args) 
    return wrapper    

@ middleFunction
def hello () :            
    print('hello world')    
        
hello()    
    
  
模块的标准文件模板     
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

‘module description’

__author__ = ‘leyi’

# code
def  hello () :
	pass 

# 命令行运行该模块时执行     
if __name__=='__main__':
    hello()


__xxx__这样的变量是特殊变量 
类似_xxx和__xxx这样的函数或变量是非公开的(private)(规范)