Day04 - 2018-04-06

函数

函数头部始终以关键字 def 开始,表示这是函数定义。

然后是函数名称,遵循的是和变量一样的命名规范。

名称之后是括号,其中可能包括用英文逗号分隔的参数(在此例中是 height 和 radius)。参数是当函数被调用时作为输入传入的值,用在函数主体中。如果函数没有参数,这些括号留空。

头部始终以英文冒号 : 结束。

#计算圆柱体体积,默认半径5。若不传,则radius为5

def cylinder_volume(height, radius=5):

    pi = 3.14159

    return height * pi * radius ** 2

python函数两种传参方式

cylinder_volume(10, 7) # pass in arguments by position 按照位置传参

cylinder_volume(height=10, radius=7) # pass in arguments by name 按照参数名传参

另外,Python 不允许函数修改不在函数作用域内的变量,在函数内直接修改外部变量会导致 UnboundLocalError,即函数内可以直接访问不经参数传递的外部变量,而不能修改。

文档字符串

就是python的函数注释,文档字符串用三个引号引起来,第一行简要解释了函数的作用

def population_density(population, land_area):

    """Calculate the population density of an area.

    INPUT:

    population: int. The population of that area

    land_area: int or float. This function is unit-agnostic, if you pass in values in terms of square km or square miles the function will return     a density in those units.

    OUTPUT:

    population_density: population / land_area. The population density of a particular area.

    """

    return population / land_area

lambda表达式

各种简化的语法...pythonic

你可以使用 Lambda 表达式创建匿名函数,即没有名称的函数。lambda 表达式非常适合快速创建在代码中以后不会用到的函数。尤其对高阶函数或将其他函数作为参数的函数来说,非常实用。

def multiply(x, y):

    return x * y

等同于 double = lambda x, y: x * y

关键字 lambda 表示这是一个 lambda 表达式。

lambda 之后是该匿名函数的一个或多个参数(用英文逗号分隔),然后是一个英文冒号 :。和函数相似,lambda 表达式中的参数名称是随意的。

最后一部分是被评估并在该函数中返回的表达式,和你可能会在函数中看到的 return 语句很像。

鉴于这种结构,lambda 表达式不太适合复杂的函数,但是非常适合简短的函数。

迭代器和生成器

迭代器是每次可以返回一个对象元素的对象,例如返回一个列表。我们到目前为止使用的很多内置函数(例如 'enumerate)都会返回一个迭代器。

迭代器是一种表示数据流的对象。这与列表不同,列表是可迭代对象,但不是迭代器,因为它不是数据流。

生成器是使用函数创建迭代器的简单方式。也可以使用定义迭代器,更多详情请参阅此处。

def my_range(x):

    i = 0

    while i < x:

        yield i

        i += 1

注意,该函数使用了 yield 而不是关键字 return。这样使函数能够一次返回一个值,并且每次被调用时都从停下的位置继续。关键字 yield 是将生成器与普通函数区分开来的依据。

for x in my_range(5):

    print(x)

会输出 0  1  2  3  4 

你可能感兴趣的:(Day04 - 2018-04-06)