No.11函数(三)
时间:2020-03-19 09:51:37
收藏:0
阅读:47
No.11
今日概要
- 函数的小高级
- lambda 表达式
- 内置函数
内容回顾
函数的基本结构
参数
- 形参
- 基本: def func(a1,a2): pass
- 默认值:def func(a1,a2=666): pass
- 默认值如是可变类型 → 有坑
- 万能:*args / **kwargs
- 实参
- 位置传参:永远在前面
- 关键字传参
- 形参
返回值
默认返回:None
特殊情况:
def func(): return 1,2,3,4 #返回元组
作用域
全局和局部
自己有找自己,自己没有找上一级,直到找到全局。
子作用域只能获取或修改上一级的数据值,不能重新赋值。
NUM = [1,2,3] def func(): #NUM.append(66) 对于父级是可变类型数据可以修改 global NUM NUM = 123 func()
函数的嵌套
def func(): name = 'alex' def inner(): print(name) name = 'eric' inner() print(name) func()
内容详细
1.函数小高级
a = 123
name = '老男孩'
nums = [11,22,33]
data = nums
def func():
pass #100行代码
# func = 函数
1.1函数名当作变量
def func():
print(123)
v1 = func #函数类似于变量,func代指一块代码的内存地址。
func()
v1()
#示例1
def func():
print(123)
func_list = [func,func,func]
func_list[0]()
func_list[1]()
func_list[2]()
#示例2
def func():
print(123)
return 666
func_list = [func,func,func]
for item in func_list:
v = item()
print(v)
#示例3
def func():
print(123)
return 666
func_list = {func,func,func}
for item in func_list:
item() #集合会去重
def func():
print(123)
def bar():
print(666)
info = {'k1':func,'k2':bar}
info['k1']()
info['k2']()
info = {func:bar} #函数也可以做字典的key,不过一般不这么用。
容易混淆
#示例一
def func():
print(123)
func_list1 = [func,func,func]
func_list2 = [func(),func(),func()]
print(func_list1)
print(func_list2)
结果:
123
123
123
[func地址,func地址,func地址]
[None, None, None]
#示例二
def func():
return 123
info = {
'k1': func,
'k2': func()
}
print(info)
结果:
{'k1': func地址, 'k2': 123}
1.2函数当作参数传递
def func(arg):
print(arg)
func(1)
func([1,2,3])
def show():
return 999
func(show) #打印的是show地址,意义不大。
#示例一
def func(arg):
arg()
def show():
print(666)
func(show)
#示例二
def func(arg):
v1 = arg()
print(v1)
def show():
print(666)
func(show)
#示例三:
def func(arg):
v1 = arg()
print(v1)
def show():
print(666)
result = func(show)
print(result)
结果
666
None
None
面试题
#有10个函数,每个函数表示一个功能。根据用户不同的选择执行相应的函数。
f1 / f2 / f3 / f4 / f5
def fuc():
print('话费查询')
def bar():
print('流量查询')
def base():
print('>>>')
def show():
print('>>>')
def test():
print('>>>')
choice = input('请选择功能:')
dic = {'f1':fuc,
'f2':bar,
'f3':base,
'f4':show,
'f5':test
}
choice = input('请选择功能:')
function_name = dic.get(choice) # 因为通过key取值不存在会报错,所以选用get。
if function_name:
function_name()
else: # 如果没有key,get默认返回None。
print('输入错误')
2.lambda表达式
用于表示简单的函数
# 三元运算,为了解决简单的if-else情况
if 1 == 1:
a = 11
else:
a = 22
a = 11 if 1==1 else 22
# lambda表达式,为了解决简单的函数情况
def func(a,b):
return a + b
func = lambda a,b: a + b
func1 = lambda : 100
func2 = lambda a: a*100
func3 = lambda *args,**kwargs: len(args) + len(kwargs)
DATA = 100
func4 = lambda a: a + DATA
v = func4(1)
print(v)
DATA = 100
def bar():
DATA = 1001
func4 = lambda a: a + DATA
v = func4(1)
print(v)
bar()
func5 = lambda n1,n2 : n1 if n1 > n2 else n2
#示例一
USER_LIST = []
func1 = lambda x: USER_LIST.append(x)
v1=func1('alex')
print(v1)
print(USER_LIST)
#示例二
def fun2(x):
v = x.strip()
return v
result = func2()
print(result)
#List的方法中基本上都是返回None;Str的方法中基本上都是返回新值。
#示例三
func3 = lambda x: x.split('l')
v = func('alex')
print(v)
#示例四
lst =[
lambda x: x.strip(),
lambda y: y + 100,
lambda x,y: x + y
]
v1 = lst[0]('alex ')
print(v1)
v2 = lst[1](100)
print(v2)
v3 = lst[2](1,2)
print(v3)
3.内置函数
自定义函数
内置函数
len()
open()
range()
id()
type()
输入输出
- print()
- input()
强制转换
- int()
- float()
- bool()
- str()
- dict()
- list()
- tuple()
- set()
数学相关
abs() 计算绝对值
v = abs(-1) print v
max() 找到最大值
v = [1,2,88,6,8] result = max(v) print(result)
min() 找到最小值
v = [1,2,88,6,8] result = min(v) print(result)
sum() 求和
v = [1,2,88,6,8] result = sum(v) print(result)
divmod() 两数相除得商和余数 ▲▲▲
a,b = divmod(101,5) print(a,b)
# 练习题 ▲▲▲ USER_LIST= [] for i in range(1,836): temp = {'name':'alex-%s'%i,'email':'123@qq.com-%s'%i} USER_LIST.append(temp) # 请通过分页对数据进行展示 # 要求:每页显示10条数据,让用户输入要查看的页码 USER_LIST= [] for i in range(1,836): temp = {'name':'alex-%s'%i,'email':'123@qq.com-%s'%i} USER_LIST.append(temp) #数据总条数:假设未知列表条数 total = len(USER_LIST) #每页展示条数:10条 page_count = 10 #总页码数 max_page, a = divmod(total, page_count) if a > 0: max_page += 1 while True: #假设用户输入的是数字 pager = int(input('请输入要查看的页码:')) if pager < 0 or pager > max_page: print('页码输入不合法,必须是1 ~ %s'%max_page) else: # 第一页 USER_LIST[0,10] # 第二页 USER_LIST[10,20] # 第三页 USER_LIST[20,30] start = (pager-1) * page_count end = pager * page_count data = USER_LIST[start:end] for item in data: print(item)
进制转换相关:
bin() 将十进制转换成二进制
#只能将10进制转换成2进制 num = 10 v1 = bin(num) print(v1)
oct() 将十进制转换成八进制
#只能将10进制转换成8进制 num = 10 v1 = oct(num) print(v1)
hex() 将十进制转换成十六进制
#只能将10进制转换成16进制 num = 16 v1 = hex(num) print(v1)
int() 将其它进制转换成十进制
#二进制转十进制 v1 = '0b1101' result = int(v1,base=2) print(result,bin(result)) #八进制转十进制 v1 = '0o1101' result = int(v1,base=8) print(result,oct(result)) #十六进制转十进制 v1 = '0x1101' result = int(v1,base=16) print(result,hex(result))
面试题
#1个字节等于8位 #IP:192.168.12.80 → 01010101.01010101.01010101.01010101 #IP地址:用.将四个八位的二进制链接起来,我们看到的是转换成十进制的显示。 示例一 请将 ip = '192.168.12.79' 中的每个十进制转换成二进制通过逗号链接起来。 ip = '192.168.12.79' ip_list = ip.split('.') result = [] for item in ip_list: result.apped(bin(int(i))) print(','.join(result)) #面试题:请将 ip = '192.168.12.79' 中的每个十进制转换成二进制后再拼接起来形成新的二进制,在计算出新的二进制转换成十进制的值是多少。 ip = '192.168.12.79' lst = ip.split('.') lst2 = [] print(lst) for i in lst: a = bin(int(i)).lstrip('0b') if len(a) < 8: a = a.rjust(8,'0') lst2.append(a) b = ''.join(lst2) print(int(b,2))
总结
- 函数当作是一个变量:参数传值 / 函数嵌套在列表字典中 ▲
- lambda 表达式
- 内置函数
原文:https://www.cnblogs.com/elliottwave/p/12521810.html
评论(0)