python-III

函数

1. 定义函数

• def关键字,依次写出函数名、括号、括号中的参数和冒号 :
• 在缩进块中编写函数体,函数的返回值用 return 语句返回。
def func():
           pass

           return


2. 调用函数

Python 内置了很多有用的函数,我们可以直接调用:
• abs()
• cmp()
• 数据类型转换函数:

int(), float(), str(),unicode(),bool()


3. 理解函数名

•函数名与变量名类似,其实就是指向一个函数对象的引用;

•给这个函数起了一个“别名”:函数名赋给一个变量。



空函数

• 定义一个什么事也不做的空函数,可以用 pass 语句;
• pass 可以用来作为占位符,还没想好怎么写函数的代码,就可以先放一个 pass ,让代码能运行起来。
def nofunc():

          pass


4. 参数检查

•调用函数时,如果参数个数不对,Python 解释器会自动检查出来,并抛出 TypeError;
• 如果参数类型不对,Python 解释器就无法帮我们检查。

• 数据类型检查可以用内置函数 isinstance 实现。


5. 函数返回值

• 函数返回值用return关键字;
• 返回一个 tuple 可以省略括号;
• Python 的函数返回多值其实就是返回一个 tuple

• 函数执行完毕也没有 return 语句时,自动 return None。


6. 函数参数

默认参数注意事项:
•有多个参数时,变化大放前面,变化小的放后面;

•必选参数在前,默认参数在后。


7. 默认参数

就是魔人要添加的参数。


8. 可变参数

- 可变参数就是传入的参数个数是可变的,可以是 1 个、2 个到任意个,还可以是 0 个。*args
如果已经有一个 list 或者 tuple,要调用一个可变参数怎么办?
- Python 允许你在 list 或 tuple 前面加一个 * 号;
- 把 list 或 tuple 的元素变成可变参数传进去;
largs = [1,2,3]
func(largs[0],largs[1],largs[2])

func(*largs)


9. 关键字参数

•关键字参数允许你传入 0 个或任意个含参数名的参数;
•这些关键字参数在函数内部自动组装为一个 dict;

•关键字参数用**kwargs。


10. 参数组合

•参数组合是指可以必选参数、 默认参数、 可变参数和关键字参数一起使用。

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


11. 参数总结

• 必选参数
•默认参数:默认参数一定要用不可变对象。
•可变参数:*args 是可变参数,args 接收的是一个 tuple。
•关键字参数:**kw 是关键字参数,kw 接收的是一个dict。
•对于任意函数,都可以通过类似 func(*args, **kw) 的形
式调用它。


12. 变量的作用域

• 局部变量:只能在函数内部使用的变量
• 全局变量:在整个程序中使用的变量

• global关键字:强制将局部变量转换为全局变量


高级特性

1. 迭代
•可以通过 for 循环来遍历这个 list 或 tuple,这种遍历我们称为迭代(Iteration)
•只要是可迭代对象,无论有无下标,都可以迭代,比如 dict就可以迭代:迭代
•默认情况下,dict 迭代的是 key。如果要迭代 value,怎么办?
for k,v in d.iteritems():
print k,v


•如何判断一个对象是可迭代对象呢?
方法是通过 collections 模块的 Iterable 类型判断迭代



•如果要对 list 实现类似 Java 那样的下标循环怎么办?
python内置的枚举方法enumerate,把一个 list 变成索引­元素对。



• for 循环里,同时引用了两个变量,在 Python 里是很常见的;
• 如果要显示[(1,2),(2,3),(3,4)]怎么实现迭代显示?



2. 列表生成式
列表生成式是Python 内置的非常简单却强大的可以用来创建 list的生成式
思考:
要生成 list [1, 2, 3, 4, 5, 6, 7] 可以用 range(1, 8)。

但如果要生成 [1x1, 2x2, 3x3, ..., 7x7] 怎么做?
方法一:for循环



方法二:列表生成式



循环太繁琐,而列表生成式则可以用一行语句代替循环生成上面的 list。

3. 生成器
为什么需要生成器?
•通过列表生成式,我们可以直接创建一个列表,受到内存限制,列表容量肯定是有限的;
•创建一个包含 100 万个元素的列表,占用很大的存储空间。

生成器是什么?
• 在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的 list,从而节省大量的空间。在 Python 中,这种一边循环一边计算的机制,称为生成器(Generator)

怎么创建生成器?把一个列表生成式的 [] 改成 ()
-使用g.next()方法依次读取元素(麻烦)



-使用 for 循环(推荐)



理解生成器的实质,当无法通过列表生成式表述问题时,如何通过函数实现生成式的功能。
python编程:著名的斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到:1, 1, 2, 3, 5, 8, 13, 21,...
fib 函数定义了斐波拉契数列的推算规则,可以从第一个元素开始,推算出后续任意的元素,逻辑非常类似generator。要把 fib 函数变成 generator,只需要把print b 改为 yield b 就可以。
•函数顺序执行,遇return语句或最后一行函数语句就返回。
•generator函数在每次调用next() 的时候执行,遇到 yield 语句返回,再次执行时从上次返回的yield 语句处继续执行。


-使用 for 循环(推荐)

          


-使用g.next()方法依次读取元素(麻烦)

 


作业题:

(1)用filter编写一个程序实现打印出1~100内的所有质数:


(2)利用map( )函数,把用户输入的不规则的英文字,变首字母大写,其他小写的规范名字。输入:['adam','LISA','barT'],输出:['Adam','Lisa','Bart']

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值