5.24~6.4-Python-语言及其应用-笔记-代码结构

代码结构

  1. 使用\ 进行连接,python 仍然把它解释为同一行!

  2. zip 进行并行迭代 并行迭代 并行迭代 并行迭代 并行迭代
    使用zip 可以对多个序列(元组,列表,字符串)进行迭代!

days = ['Mon','Tues','wens']
fruits = ['bana','orange','peach']
desserts =['tirma','ice_cream','pie']
for day,fruit,dessert in zip(days,fruit,desserts):
    print (day,':drink',drink,'-eat',fruit,'-enjoy',dessert)

和dict,list 函数一起可以生成,对应的List 和dict

list(zip(days,fruits))
dict(zip(days,fruits))
  1. 推导式
    分别实现List,dict ,set 推导式子!
    list 推导式子~
num_list = [num for num in range(1,6)]
加入判断
num_list = [num for num in range(1,6) if num%2==1]
列表推导式生成元组的形式
col = range(1,7)
row = range(1,7)
cells = [(row,col) for row in rows for col in cols]
for i in cells:
    print i
    (1,1)(2,2) ....

dict 推导式子~**set(word)**

word = 'letter'
letter_counts = {letter:word.count(letter) for letter in set(word)}
letter_counts = {'l':1,'e':2,'t':3,'t':4,'e':5,'r':6}

Set 推导式子~

a_set = {num for num in range(1,6)if num %3 ==1}
a_set = {1,4}

!!元组是没有推导式子的,使用( )是生成器对象!!,生成器对象把数据传给迭代器的一种方式!,生成器只能运行一次,因为不保存在内存中,只能是使用一次

num_things = (num for num in range(1,6))
  1. None值的解释!None作为布尔值和false 没有区别,区分false 需要使用is 的方式
thing = none 
if thing  和 if False 是没有区别
if thing is none:  

5.参数类型
位置参数,关键字参数,指定默认参数值 

def menu(wine,entree,open):
    return {'a':wine,'b':entree,'c':open}
def menu(a=wine,b=entree,c=open):
def menu(wine,entree,c=open):

指定默认参数值在函数定义的时候一定被计算出来了,而不是在程序运行的时候,下面的程序解释了一下

def buggy(arg,result=[]):
    result.append(arg)
    print result 
>>>bug('a')
>>>bug('b')#expect ['b']
['a','b']

6.*收集位置参数,收集所有的或者是剩下的位置参数,常用的方式是*args

def print_args(req1,req2,*args):
    print ('a':req1)
    print ('b':req2)
    print ('more',args)
>>>print_args('cap','gloves',scarf','morecle','mysral-max')

7.** 收集关键字参数到一个字典里面,通常使用

def print_kwargs(**kwargs):
    print ('key':kwargs)
print_kwargs(wine='a',entree='b',dessert='c')
>>> key:{'wine':'a','entree':'b','dessert':'c'}

8. 函数
8.1 参数func 是一个可以运行的函数的名称,把函数名称answer传过去,这里的answer仅仅是对象形式

#define func
def run_sth(func):
    func()
def answer():
    print 'happy'

>>>run_sth(answer)
>>> 42
def add_args(arg1,arg2):
    print (arg1+arg2)
def run_sth_with_args(func,arg1,arg2):
    func(arg1,arg2)
>>> run_sth_with_args(add_args,5,9)

8.2 内部函数,可以避免内部的循环和代码重迭,!!!!!!!!! 

def outer(a,b):
    def inner(c,d):
        return c+d
    return inner(a,b)

def knight(saying):
    def inner(quote):
        return 'we are knight who say :'%s''%quote 
    return inner(saying)
>>>knight('Ni!')

8.3 闭包(inner2 是一个闭包),内部函数是一种闭包,闭包可以由另外一个函数动态生成的函数,并且可以存储/改变函数外创建的值的函数
inner2可以直接得到外部的saying参数,不需要通过一个参数获取,
外部函数返回的是inner2,是inner2的复制,并不是调用了inner的函数

def knight2(saying):
    def inner2():
        return 'we are the knight who say :'%s ''%saying
    return inner2
a = knight2('Duck')
b = knight2('Hase')
#调用函数
>>>a()
>we are the knight who say :Duck
>>>b()
>we are the knight who say :Hase

8.4 lambda()函数,小函数定义和使用都是比较快的,captailze()函数是使得每一个单词的首字母变成大写

stairs= ['thud','meow','thus','hiss']
def edit_story(words,func):
    for i in words:
        print(func(i))
edit_story(stairs,lambda word:word.captailze()+'!')

9.生成器generator,创建一个列表但是不占用内存,生成器是为了迭代数据产生的,例如range()
生成器函数,区别普通函数的,它的返回值是yield语句声明,不是用return ,例:

def my_range(fir=0,last=10,step=1):
    num = first
    while num <last:
        yield num 
        number += step
>>> range=my_range(1,5,1)

10.装饰器decoration ,以一个函数作为输入,另外一个函数作为输出

def document_it(func):
    def new_function(*args,**kwargs):
        print 'Running function:'
        print 'Position argument:'
        result = func(*args,**kwargs)
        print 'end'
        return result 
    return new_function

修饰器的使用方式@,表示调用

@doucument_it
def add_init(a,b):
    return a+b

一个函数调用多个修饰器,使用的顺序是越靠近def 的装饰器首先开始执行,有先后顺序

def square_it(func):
    def new_function(*args,**kwargs):
        result = func(*args,**kwargs)
        return result*result 
    return new_function
@document_it
@square_it
def add_inits(a,b)
    return a+b
>>> add_init(3,5)

11.global 变量,需要声明
函数中没有办法改变全局变量,报错的原因是函数里面有一个自己命名的局部变量,如果要得到全局变量,必须是利用global进行声明!!

def change_for_global():
    global name = 'scc'
    name = 'wjn'
    print 'this is inner:',name
>>>change_for_global()

12 exception ,分开处理会是一个比较好的选择,下面的例子IndexError 是一个由于索引错误抛出的异常!,exception Execeprion as other:
这样的方式可以得到一个异常对象

shortlist= [0,1,2]
while True:
    value = input('Postion[q to quit]?')
    if value=='q':
        break
    try:
        postion = int(value)
        print shortlist[position]
    except IndexError as error:
        print ('Bad index',position)
    exception Execeprion as other:
        print 'Something else broke',other

自己定义一个异常类(class 对象),继承的是Exception的父类,引发异常使用的是raise 的方式,
except OopsException as Exc:这样的方式是获得整个异常对象

class UpperException(Exception):
    pass
words = ['enneize','happy','Mo']
for i in words:
    if i.isupper():
        try:
            raise UpperException(word)
        except OopsException as Exc:
            print(Exc)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值