一、函数理解
函数本身也可以赋值给变量,即:变量可以指向函数。
函数名其实就是指向函数的变量!
##注意:abs为函数名,给abs=1重新赋值后,abs已不是函数,而是一个整数
1.定义函数
定义函数时, 参数称为形参, 这个参数的名字可以任意修改;
函数体
return 返回值
2.调用函数
调用函数:真正执行函数内容
调用函数时的参数称为实参, 这个参数必须有存在的值;
# 函数名(实参)
# print(函数名(实参)
for循环
3.带有返回值的函数
return 关键字, 函数的返回值, 通过print打印;
一般函数都有返回值, 如果在python中没有返回值时, 默认返回None;
函数一旦遇到return, 后面的代码不再执行
4.函数参数
1)默认参数注意事项:
•有多个参数时,变化大放前面,变化小的放后面;
•必选参数在前,默认参数在后
默认参数; 如果只传递一个参数, 那么b默认为2;
# # 如果传递两个参数, a=2,b=4, 覆盖原有的默认值;
2)可选参数
当形参里面是*变量名, 可选参数, 可以传递任意多个参数;
3)关键字参数
•关键字参数允许你传入 0 个或任意个含参数名的参数;
•这些关键字参数在函数内部自动组装为一个 dict;
•关键字参数用**kwargs
# 关键字参数,**变量名可以接收任意多个key-value键值对;
# 接收的变量是字典数据类型;
name, passwd 必选参数
4)参数组合
•参数组合是指可以必选参数、 默认参数、 可变参数和关键字参数一起使用。
•参数定义的顺序必须是:必选参数、 默认参数、可变参数和关键字参数。
5)参数总结
• 必选参数
•默认参数:默认参数一定要用不可变对象
•可变参数:*args 是可变参数,args 接收的是一个 tuple
•关键字参数:**kw 是关键字参数,kw 接收的是一个
dict
•对于任意函数,都可以通过类似 func(*args, **kw) 的形
式调用它
5.函数变量的作用域
• 局部变量:只能在函数内部使用的变量,在函数运行时生效, 函数运行结束则释放;
• 全局变量:在整个程序中使用的变量,作用于整个脚本
• global关键字:强制将局部变量转换为全局变量,只在函数内部生效;
练习:
1.题目需求:
对于一个十进制的正整数, 定义f(n)为其各位数字的平方和,如:
f(13) = 1**2 + 3**2 = 10
f(207) = 2**2 + 0**2 + 7**2 = 53
下面给出三个正整数k,a, b,你需要计算有多少个正整数n满足a<=n<=b,
且k*f(n)=n
输入:
第一行包含3个正整数k,a, b, k>=1, a,b<=10**18, a<=b;
输出:
输出对应的答案;
范例:
输入: 51 5000 10000
输出: 3
2.Collatz序列
编写一个名为collatz()的函数,它有一个名为number的参数。如果参数是偶数,那么collatz()就打印出number//2,并返回该值。如果number是奇数,collatz()就打印并返回3*number+1。
然后编写一个程序,让用户输入一个整数,并不断对这个数调用collatz(),直到函数返回值1(令人惊奇的是,这个序列对于任何整数都有效,利用这个序列,你迟早会得到1!既使数学家也不能确定为什么。你的程序在研究所谓的“Collatz序列”,它有时候被称为“最简单的、不可能的数学问题”)。
6.函数返回多个值
###判断字符类型
判断字符是否为字符串
判断字符是否为整形或浮点型
练习:
# 函数名get_max_min_avg()
# 函数可以传递任意多个数字, 并且保证是整形或者浮点型;
# 如果满足条件, 返回最大值, 最小值,和平均值;
# 如果不满足条件, 返回None;
# 调用函数, 打印函数结果;
####传递任意多个数字, 可变参数,*args , args是元组数据类型;
7.形参顺序
# *args: tuple
# **kwargs: dict
(常用的)参数顺序: 必选参数 > 默认参数 > 可变参数 > 关键字参数
###默认参数和可变参数存在时顺序不能为默认参数 > 可变参数
(特例): 可变参数 > 默认参数
8.形参的默认值必须为不可变类型
# 可变数据类型: list, set, dict,tuple
# 默认参数的默认值为不可变数据类型(str,int,float,bool,complex);
二 、高级特性---迭代
1.字典迭代
2.迭代key-value值
3.判断对象是否可迭代
from collections import Iterable 判断字符类型函数
4.枚举
三、高级特性---列表生成式
1.列表生成式: 生成列表的公式;
2.列表生成式练习
1)随机生成10个ip地址
2)显示列表, 1~10之间所有数求平方
3)找出/var/log/目录中所有以.log结尾的文件
###以".log" 结尾的文件变为大写,不是以".log" 结尾的文件变为标题
4)找出/etc/目录中所有以.conf结尾的文件, 并把这些文件名转化为大写的文件名
5)列表生成式应用_腾讯编程
给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输
入值小于1000。
如,输入为10, 程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7))
- 输入描述:
输入包括一个整数n,(3 ≤ n < 1000)
- 输出描述:
输出对数
- 示例1 :
```
输入:
10
输出:
2
第一种方法:
第二种方法:
第三种方法:
四、高级特性---集合生成式
五、高级特性---字典生成式
1.将字典所有的key值变为大写;
1)传统方法:
2)字典生成式方法:
2.key值变成大写, value值在原有基础上加1:
3.大小写key值合并, 统一以小写key值输出;
##方法一、字母必须要同时出现大写和小写的字母,否则会报错;
##方法二、通用方法
4. 把字典的key和value值调换;
六、生成器
###为什么需要生成器?
•
通过列表生成式,我们可以直接创建一个列表,受到内存限
制,列表容量肯定是有限的;
•
创建一个包含 100 万个元素的列表,占用很大的存储空间;
###生成器是什么?
• 在循环的过程中不断推算出后续的元素呢?这样就不必创
建完整的 list,从而节省大量的空间。在 Python 中,这种一
边循环一边计算的机制,称为生成器(Generator)
1。创建生成器
### 把一个列表生成式的 [] 改成 ()
##使用 python3为g.__next__() python2中为g.next()方法依次读取元素(麻烦)
python3:
python2:
##使用 for 循环(推荐)
##for 循环的底层原理
2.生成器的实质:当无法通过列表生成式表述问题时,如何通过函数实现生成式的功能。
python编程:著名的斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到:1, 1, 2, 3, 5, 8, 13, 21,...
g = fib(10) # 如果函数中有yield关键字, 返回一个生成器对象;目前不执行函数内容;
print(g.__next__()) # 当遇到g.__next__方法时, 执行函数, 当遇到yield停止执行; print(g.__next__())时yield后面的值;
print(g.__next__()) # 再次调用g.__next__方法时, 从上次停止的地方继续执行, 遇到yield停止;
g.close() # 关闭生成器
###迷你机器人###
send方法, 给生成器传递值, 直到遇到下一个yield停止;