第十一天
- 函数的小高级
- lambda表达式
- 内置函数
内容回顾
- 函数的基本结构
- 参数
- 形参
- 基本参数
- 默认值
- 万能参数
- *args
- **kwarg
- 实参
- 位置传参
- 关键字传参
- 返回值
- 默认返回:None
- 返回多值,生成元组
- 作用域
- 全局作用域
- 局部作用域
- 优先自己>父级>全局
- 子作用域只能读取和修改父级的值,不能重新赋值
- globe
- nonlocal
- 函数的嵌套
函数的小高级
- 函数的赋值
# 1
def func():
print('测试')
v1 = func
func()
v1()
# 2
def func():
print('测试')
func_list = [func, func, func]
func_list[0]()
func_list[1]()
func_list[2]()
for item in func_list:
item()
# 3
def func():
print(123)
return 666
func_list = [func, func, func]
for item in func_list:
v = item()
print(v)
# 123
# 666
# 123
# 666
# 123
# 666
# 4
def func():
print('测试')
def bar():
print('测试')
info = {'k1': func, 'k2': bar}
# 5
def func():
print(123)
func_list1 = [func, func, func]
func_list2 = [func(), func(), func()] #执行三次
print(func_list2) # 打印列表中函数的返回值
# 123
# 123
# 123
# [None, None, None]
- 函数名做变量,打印函数执行结果为返回值
- 函数可以当作参数进行传递
# 1
def func(arg):
arg()
def show():
print(666)
func(show) # 666
# 2
def func(arg):
v = arg()
print(v)
def show():
print(666)
func(show) # 666 None
# 3
def func(arg):
v = arg()
print(v)
def show():
print(666)
result = func(show)
print(result) # 666 None None
- 函数做字典的值(面试题)
def func():
print('1.花费查询')
def bar():
print('2.对公业务')
def base():
print('3.对私业务')
dic = {'f1': func, 'f2': bar, 'f3': base}
while True:
k = input('请输入:')
v = dic.get(k, '服务不存在')
if v == '服务不存在':
print(v)
else:
v()
break
lambda表达式
- 用于表示简单函数
# 结构为函数名和返回值
func = lambda n1, n2: n1 if n1 > n2 else n2
print(func(1, 2)) # 2
- 练习题
# 1
USER_LIST = []
func1 = lambda x: USER_LIST.append(x) # append()无返回值,返回None
v = func1('alex')
print(v) # None
print(USER_LIST) # ['alex']
# 2
func1 = lambda x: x.strip() # strip()有返回值,返回去掉左右空格的字符串
v = func1(' alex ')
print(v) # 'alex'
# 3
func1 = lambda x: x.split('l') # split()有返回值,返回分割的列表
v = func1('alex')
print(v) # ['a', 'ex']
# 4
func_list = [lambda x: x.strip(), lambda y: y + 188, lambda x, y: x + y] result = func_list[0](’ alex ') print(result) # alex
## 内置函数
1. len()
2. open()
3. id()
4. range()
5. type()
6. 输入输出
+ inptut()
+ print()
7. 强制转换
+ dict()
+ list()
+ tuple()
+ int()
+ float()浮点型
+ str()
+ bool()
+ set()
8. 数学相关
+ abs()绝对值
+ max()最大值
+ min()最小值
+ sum()求和
+ divmod()两数相除得商和余数
```python
# 分页练习
USER_LIST = []
for i in range(1, 836):
temp = {'name': '李绍奇-%s' % i, 'email': 123}
USER_LIST.append(temp)
while True:
# 分页展示
pager = input('第几页')
pager = int(pager)
# 数据总页数
total_count = len(USER_LIST)
# 每页显示条数10
per_page_count = 10
# 总页码数
max_page_num, n = divmod(total_count, per_page_count)
if n > 0:
max_page_num += 1
if pager < 1 or pager > max_page_num:
print('超出页码范围,页码范围1~%s' % max_page_num)
else:
content = USER_LIST[(pager - 1) * per_page_count:pager * per_page_count]
for item in content:
print(item)
- 进制转换
- bin() 将十进制转换成二进制
- 二进制标志0b
- oct将十进制转换成二进制
- 八进制标志0o
- int()将其他进制转换为二进制
- int(其他进制字符串,base=其他进制)
v = int('0b1101', base=2)
print(v)
- hex()将十进制转换成十六进制
- 十六进制标志0x
- 面试题
知识点
- 一个字节等于8位
- IP:192.168.12.79四个点分二进制,最大255,最小000
# 转换成二进制用逗号连接
ip = '192.168.12.79'
lis = ip.split('.')
ls = []
for item in lis:
item = int(item)
item = bin(item)
ls.append(item)
print(','.join(ls))
# 拼接二进制数得到新的二进制数,转换成十进制
ip = '192.168.12.79'
ip_list = ip.split('.')
ls = []
for item in ip_list:
item = bin(int(item)).lstrip('0b')
if len(item) < 8:
item = (8 - len(item)) * '0' + item
ls.append(item)
process = ''.join(ls)
result = int(process, base=2)
print(result)
总结
- 函数可做变量
- 作为参数
- 作为元素嵌套到字典/列表中
- lambda表达式
- 内置函数
- 输入/输出
- 数学相关
- 进制转换
- 强制转换
- 其他
作业
- 列举 str、list、dict、set 中的常用方法(每种至少5个),并标注是否有返回值。
- 列举你常见的内置函数
- 看代码分析结果
def func(arg):
return arg.replace('苍老师', '***')
def run():
msg = "Alex的女朋友苍老师和大家都是好朋友"
result = func(msg)
print(result)
run() # Alex的女朋友***和大家都是好朋友
- 看代码分析结果
def func(arg):
return arg.replace('苍老师', '***')
def run():
msg = "Alex的女朋友苍老师和大家都是好朋友"
result = func(msg)
print(result)
data = run() # Alex的女朋友***和大家都是好朋友
print(data) # None
- 看代码分析结果
DATA_LIST = []
def func(arg):
return DATA_LIST.insert(0, arg)
data = func('绕不死你')
print(data) # None
print(DATA_LIST) # ['绕不死你']
- 看代码分析结果
def func():
print('你好呀')
return '好你妹呀'
func_list = [func, func, func]
for item in func_list:
val = item() # 你好呀
print(val) # 好你妹呀
- 看代码分析结果
def func():
print('你好呀')
return '好你妹呀'
func_list = [func, func, func]
for i in range(len(func_list)):
val = func_list[i]() # 你好呀
print(val) # 好你妹呀
- 看代码写结果
def func():
print('你好呀')
return '好你妹呀'
func_list = [func, func, func]
for i in range(len(func_list)):
val = func_list[i]() # 你好呀
print(val) # 好你妹呀
- 看代码写结果
def func():
return '烧饼'
def bar():
return '豆饼'
def base(a1, a2):
return a1() + a2()
result = base(func, bar)
print(result) # 烧饼豆饼
- 看代码写结果
def func():
return '烧饼'
def bar():
return '豆饼'
def base(a1, a2):
return a1 + a2
result = base(func(), bar())
print(result) # '烧饼豆饼'
- 看代码写结果
v1 = lambda: 100
print(v1()) # 100
v2 = lambda vals: max(vals) + min(vals)
print(v2([11, 22, 33, 44, 55])) # 66
v3 = lambda vals: '大' if max(vals) > 5 else '小'
print(v3([1, 2, 3, 4])) # 小
- 看代码写结果
def func():
num = 10
v4 = [lambda: num + 10, lambda: num + 100, lambda: num + 100, ]
for item in v4:
print(item())
func() # 20 110 110
- 看代码写结果
for item in range(10):
print(item) # 012345678
print(item) # 9
14.看代码写结果
def func():
for item in range(10):
pass
print(item)
func() # 9
- 看代码写结果
item = '老男孩'
def func():
item = 'alex'
def inner():
print(item)
for item in range(10):
pass # item = 9
inner() # 9
func() # 9
- 看代码写结果(新浪微博面试题)
def func():
for num in range(10):
pass # item = 9
v4 = [lambda: num + 10, lambda: num + 100, lambda: num + 100, ]
result1 = v4[1]() # 109
result2 = v4[2]() # 109
print(result1, result2)
func() # 109 109
- 通过代码实现如下准换
# 二进制转换成十进制:v = '0b1111011'
v = '0b1111011'
print(int(v, base=2))
# 十进制转换成二进制:v = 18
v = 18
print(bin(v))
# 八进制转换成十进制:v = '011'
v = '011'
print(int(v, base=8))
# 十进制转换成八进制:v = 30
v = 30
print(oct(v))
# 十六进制转换成十进制:v = '0x12'
v = '0x12'
print(int(v, base=16))
# 十进制转换成十六进制:v = 87
v = 87
print(hex(v))
- 请编写一个函数实现将IP地址转换成一个整数。【面试题】
# 如 10.3.9.12 转换规则为二进制:
# 10 00001010
# 3 00000011
# 9 00001001
# 12 00001100
# # 再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ?
ip = '10.3.9.12'
ip_list = ip.split('.')
ip_list_bin = []
for item in ip_list:
item = (bin(int(item)).lstrip('0b'))
item = item.rjust(8, '0')
ip_list_bin.append(item)
result = int(''.join(ip_list_bin), base=2)
print(result) # 167971084