Python函数

一、简介

1、定义

#函数是Python中最主要也是最重要的代码组织和复用手段。

 

二、使用

1、声明

#def关键字声明函数,return关键字返回值(无return关键字则返回None)

#例子

def add_three( x, y, z = 1.5 ):

    if( z > 10):

        return (x+y) * 10

    else:

        return (x+y) / 10

2、参数

#函数可以有位置参数(positional)和一些关键字参数(keyword),关键字参数必须位于

位置参数后。

#关键字参数通常用于函数中指定默认值或可选参数

#上述例子中,x和y是位置参数,而z则是关键字参数,可以以任何顺序指定关键字参数。

3、命名空间、作用域、局部函数

#命名空间(namespace):用于描述变量作用域

#作用域:按照作用的范围,分为全局(global)和局部(local)

#任何在函数中赋值的变量默认都是被分配到局部命名空间(local namespace)中的,局部命名空间在函数被调用时创建的,函数参数会立即填入该命名空间,函数执行完毕,局部命名空间就会被销毁。

a = None #在函数体外创建即是全局变量

#在函数体内进行赋值操作,需要先使用global关键字声明才行
global a 
a = [1,2] 

4、返回多个值

函数返回的多个值其中是一个对象,也就是元组,也可以返回字典,取决于需要。

 

三、函数也是对象

1、将函数定义为某种操作放入列表中

      如需要对字符串进行一些处理:去除空白符、删除各种标点符号、正确的大写格式等。

     

import re

#正则表达式去除特殊符号
def remove_punc(value):
    return re.sub('[!#?]', '', value)

clean_ops = [str.strip, remove_punc, str.title]

def clean_strings(strings, ops):
    result = []
    for value in strings:
        for op in ops:
            value = op(value)
        result.append(value)
    return result

2、将函数作为参数传入另一个函数

 

四、匿名(lambda)函数

1、定义

#仅由单条语句组成,该语句的结果就是返回值

equiv_anon = lambda x : x * 2 #定义

2、lambda函数可以作为参数传入一个函数

 

五、柯里化:部分参数应用

1、柯里化(currying)是指通过部分参数应用(partial argument application)从现有函数派生出

新函数的技术。

2、使用

add_five = lambda y : add_number(5, y) #第二个参数称为”柯里化的“(curried)

add_five = partial(add_number, 5) #内置functools模块的partial函数可以简化

 

六、生成器

1、简介

#通过迭代器协议(iterator protocol,是一种使对象可迭代的通用方式)能以一种一致的方

式对序列进行迭代。

#对字典等进行迭代时,Python解释器首先会尝试创建一个迭代器,迭代器是一种特殊对

象,它可以在诸如for循环之类的上下文中向Python解释器输送对象。

2、定义

#生成器(generator)是构造新的可迭代对象的一种简单方式。

#生成器以延迟的方式返回一个值序列

3、创建

#第一种方式

将函数中的return替换为yeild

#第二种方式

生成器表达式(generator expression),将列表推导式的方括号改为圆括号。

gen (x ** 2 for x in range(1000))

生成器表达式也可作为函数参数

 

七、itertools模块

1、简介

#标准库itertools模块中有一组生成器

2、常见itertools函数(待学)

#combinations(iterable, k)

#permutations(iterable, k)

#groupby(iterable, keyfunc)

#product(*iterables, repeat=1)

 

八、错误和异常处理

1、错误

# ValueError、TypeError

 

2、异常处理

# try / catch 可以处理一个异常

# 使用元组可以包含多个异常

# 无论是否有异常,使用finally可以使其中一段代码始终执行

# 使用else让只在try部分执行成功时执行该部分代码

你可能感兴趣的:(Python,Python入门学习)