码迷,mamicode.com
首页 > 编程语言 > 详细

python学习笔记2

时间:2017-10-17 21:41:28      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:顺序   rom   iterable   特殊   pretty   extra   for   else   简化   

学习廖雪峰的官方网站https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000

6 函数

函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”。

函数名其实就是指向函数的变量,也可把函数作为参数传入,这样的函数称为高阶函数

在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。

pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。

Python的函数返回多值其实就是返回一个tuple, 而多个变量可以同时接收一个tuple,按位置赋给对应的值。

def mine(x,y):
    if not isinstance(x, (int, float)): #数据类型检查
        print(‘ERROR‘)
    else:
        n=str(x)
        m=y*2
    return m,n

7 函数的参数

(1) 位置参数:传入的值按照位置顺序传入

(2) 默认参数:默认参数必须指向不变对象

(3) 可变参数:传入的参数个数是可变的 def calc(*numbers): numbers可以把多个参数,作为tuple传入;如有a=(1,2,3), calc(*a)

(4) 关键字参数:而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict

def person(name, age, **kw):
person(‘Bob‘, 35, city=‘Beijing‘)

也可以先组装出一个dict,然后,把该dict转换为关键字参数传进去: extra = {‘city‘: ‘B‘, ‘job‘: ‘E‘} person(‘Jack‘, 24, **extra)

(5) 命名关键字参数:如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和job作为关键字参数。

def person(name, age, *, city, job): 和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符**后面的参数被视为命名关键字参数。

命名关键字参数可以有缺省值,从而简化调用。 如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了。

参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

8 高级特性

(1) 切片,L[a:b:c],包含a但不包含b, c是间隔。

(2) 列表生成式,把要生成的元素x * x放到前面,后面跟for循环, 可以加上if判断, 还可以使用两层循环 [x*x for x in range(1,10) if x%2==0]

(3) generator,循环的过程中不断推算出后续的元素 g = (x * x for x in range(10))

通过next()函数获得generator的下一个返回值generator也是可迭代对象,可以用for循环。

如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator。

函数是顺序执行,遇到return语句或者最后一行函数语句就返回。

而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

直到最后抛出StopIteration错误表示无法继续返回下一个值了。

(4) Iterator, 可以被next()函数调用并不断返回下一个值的对象称为迭代器 可以使用isinstance()判断一个对象是否是Iterator

from collections import Iterator
isinstance((x for x in range(10)), Iterator)

凡是可作用于for循环的对象都是Iterable类型; 凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

python学习笔记2

标签:顺序   rom   iterable   特殊   pretty   extra   for   else   简化   

原文地址:http://www.cnblogs.com/straight/p/7683862.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!