python11

第十一天

  • 函数的小高级
  • lambda表达式
  • 内置函数

内容回顾

  1. 函数的基本结构
  2. 参数
  • 形参
  • 基本参数
  • 默认值
  • 万能参数
  • *args
  • **kwarg
  • 实参
  • 位置传参
  • 关键字传参
  1. 返回值
  • 默认返回:None
  • 返回多值,生成元组
  1. 作用域
  • 全局作用域
  • 局部作用域
  • 优先自己>父级>全局
  • 子作用域只能读取和修改父级的值,不能重新赋值
  • globe
  • nonlocal
  1. 函数的嵌套

函数的小高级

  1. 函数的赋值
# 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. 函数名做变量,打印函数执行结果为返回值
  2. 函数可以当作参数进行传递
# 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
  1. 函数做字典的值(面试题)
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表达式

  1. 用于表示简单函数
# 结构为函数名和返回值
func = lambda n1, n2: n1 if n1 > n2 else n2
print(func(1, 2))	# 2
  1. 练习题
# 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)
  1. 进制转换
  • 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)

总结

  1. 函数可做变量
  • 作为参数
  • 作为元素嵌套到字典/列表中
  1. lambda表达式
  2. 内置函数
  • 输入/输出
  • 数学相关
  • 进制转换
  • 强制转换
  • 其他

作业

  1. 列举 str、list、dict、set 中的常用方法(每种至少5个),并标注是否有返回值。
  2. 列举你常见的内置函数
  3. 看代码分析结果
def func(arg):
    return arg.replace('苍老师', '***')


def run():
    msg = "Alex的女朋友苍老师和大家都是好朋友"
    result = func(msg)
    print(result)


run()	# Alex的女朋友***和大家都是好朋友
  1. 看代码分析结果
def func(arg):
    return arg.replace('苍老师', '***')


def run():
    msg = "Alex的女朋友苍老师和大家都是好朋友"
    result = func(msg)
    print(result)

data = run()	# Alex的女朋友***和大家都是好朋友
print(data)		# None
  1. 看代码分析结果
DATA_LIST = []


def func(arg):
    return DATA_LIST.insert(0, arg)


data = func('绕不死你')		
print(data)		# None
print(DATA_LIST)	# ['绕不死你']
  1. 看代码分析结果
def func():
    print('你好呀')
    return '好你妹呀'


func_list = [func, func, func]

for item in func_list:
    val = item()  # 你好呀
    print(val)  # 好你妹呀
  1. 看代码分析结果
def func():
    print('你好呀')
    return '好你妹呀'


func_list = [func, func, func]

for i in range(len(func_list)):
    val = func_list[i]()    # 你好呀
    print(val)  # 好你妹呀

  1. 看代码写结果
def func():
    print('你好呀')
    return '好你妹呀'


func_list = [func, func, func]

for i in range(len(func_list)):
    val = func_list[i]()    # 你好呀
    print(val)  # 好你妹呀

  1. 看代码写结果
def func():
    return '烧饼'


def bar():
    return '豆饼'


def base(a1, a2):
    return a1() + a2()


result = base(func, bar)
print(result)  # 烧饼豆饼
  1. 看代码写结果
def func():
    return '烧饼'


def bar():
    return '豆饼'


def base(a1, a2):
    return a1 + a2


result = base(func(), bar())
print(result)	# '烧饼豆饼'
  1. 看代码写结果
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]))  # 小
  1. 看代码写结果
def func():
    num = 10
    v4 = [lambda: num + 10, lambda: num + 100, lambda: num + 100, ]
    for item in v4:
        print(item())


func()  # 20 110 110
  1. 看代码写结果
for item in range(10):
    print(item)	# 012345678
    
print(item)	# 9

14.看代码写结果

def func():
    for item in range(10):
        pass
    print(item)
func()	# 9

  1. 看代码写结果
item = '老男孩'


def func():
    item = 'alex'

    def inner():
        print(item)

    for item in range(10):
        pass  # item = 9
    inner()  # 9


func()  # 9
  1. 看代码写结果(新浪微博面试题)
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
  1. 通过代码实现如下准换
# 二进制转换成十进制: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))
  1. 请编写一个函数实现将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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值