今天主要分享函数的一般的应用场景,这里给大家分为初级一些的应用场景,以及高级的应用场景。还有一种特殊的函数形式——lambda表达式
之前我们学过了很多的数据类型,其中容器类型的有集合、字典、列表等,而函数也可以作为元素放进这些容器类型的数据类型
函数可以放在集合里,也可以放在字典里,在字典中的时候一般作为字典的值
def func():
print(123)
def bar():
print(666)
info = {'k1': func, 'k2': bar}
info['k1']()
info['k2']()
函数名当变量来使用
def func():
print(1,2,3)
x = func()
print(x)
lis = [func(),func(),func()]
print(lis)
def func():
print(123)
func_list = [func, func, func]
# func_list[0]()
# func_list[1]()
# func_list[2]()
for item in func_list:
v = item()
print(v) # 123 None 123 None 123 None
def func():
print(123)
def bar():
print(666)
info = {'k1': func, 'k2': bar}
info['k1']()
info['k2']() # 123 666
混淆:
def func():
return 123
func_list1 = [func,func,func]
func_list2 = [func(),func(),func()]
print(func_list1) # [<function func at 0x000002C1829BBA60>, <function func at 0x000002C1829BBA60>, <function func at 0x000002C1829BBA60>]
print(func_list2) #[123, 123, 123]
函数可以当参数进行传递
def func(arg):
v1 = arg()
print(v1)
def show():
print(666)
func(show) # 666 None
def func(arg):
v1 = arg()
print(v1)
def show():
print(666)
result = func(show)
print(result) #666 None None
lambda表达式是用来表达简单的函数,默认有返回值return
def func(a1,a2):
return a1+a2
func2 = lambda a1,a2:a1+a2
v = func2(1,2)
# 以上的两种写法是完全等价的
输入两个数,比较大小,返回大的那个
func5 = lambda a,b:a if a>b else b #输入两个数,返回其中大的数字
v = func5(3,4)
内置函数
输入输出
强制转换
数字相关
abs() : 绝对值
v = abs(-1)
print(v)
float() :浮点型(小数)
v = 55
v1 = float(55)
print(v1)
max() :最大值
v = [1,2,311,21,3,]
result = max(v)
print(result)
min() :最小值
v = [1,2,311,21,3,]
result = min(v)
print(result)
sum() :求和
v = [1,2,311,21,3,]
result = sum(v)
print(result)
divmod() :两数相除,得商和余数
a,b = divmod(1001,5)
print(a,b)
分页功能
# 练习题 请通过分页对数据进行展示
"""
要求:
每页显示10条数据
让用户输入要查看的页面:页码
"""
lis = []
for i in range(1,845):
info = {'name':'大栗%s'%i,'age':'1%s'%i}
lis.append(info)
per_page= 10
total_data = 845
page,other = divmod(total_data,per_page)
if other != 0:
page += 1
# 1 0-10
# 2 10-20
# 3 20-30
while True:
message = input('请输入页数:')
message = int(message)
if message>845 or message<1:
print('错误')
else :
start_position = (message-1)*per_page
end_position = message*per_page
data = lis[start_position:end_position]
print(data)
for item in data:
print(item)
LIS = []
for i in range(1,934):
info = {'name':'小猪%s'%i,'hobby':'睡觉%s'%i}
LIS.append(info)
how_many = 7
hole_length = len(LIS)
print(hole_length)
hole_length,rest = divmod(hole_length,how_many)
if rest != 0:
hole_length += 1
# 1 0,7
#2 7,14
#3 14,21
#4 21,28
while True:
message = input("请输入")
message = int(message)
if message>hole_length or message<1:
print('输入有误,请在范围内输入;')
else:
start_location =(message-1)*how_many
end_location = message*how_many
total = LIS[start_location:end_location]
for line in total:
print(line)
"""
编码相关
chr :将十进制转化为Unicode编码中对应的字符串
v = chr(99)
print(v)
ord :将Unicode编码中对应的字符串找到并转化为其对应的十进制
num = ord('中')
# 应用
# 随机验证码
import random
def get_random_code(length = 6):
LIS = []
for i in range(length):
v = random.randint(65,90)
LIS.append(chr(v))
var = "".join(LIS)
return var
v1 = get_random_code(7)
print(v1)
import random # 导入一个模块
v = random.randint(起始,终止) # 得到一个随机数
高级一点的内置函数
map:循环每个元素(第二个参数),然后让每个元素执行函数(第一个参数),将每个函数执行的结果保存到新的列表里并返回。(有返回值)
v1 = [11,22,33,44]
result = map(lambda x:x+100,v1)
print(list(result)) # 特殊
# 每个数乘以10
v1 = [12,34,45,23]
var = map(lambda x:x*10,v1)
print(list(var))
filter
v1 = [11,22,33,'asd',44,'xf']
def func(x):
if type(x) == int:
return True
return False
result = filter(func,v1) # [11,]
print(list(result))
result = filter(lambda x: True if type(x) == int else False ,v1)
print(list(result))
result = filter(lambda x: type(x) == int ,v1)
print(list(result))
reduce
import functools
v1 = ['wo','hao','e']
def func(x,y):
return x+y
result = functools.reduce(func,v1)
print(result)
result = functools.reduce(lambda x,y:x+y,v1)
print(result)
面试题:
常用的内置函数有哪些?
filter/map/reduce是什么意思?
什么是匿名函数?
进制转换相关
bin:将十进制转换为二进制
num = 13
v1 = bin(num)
print(v1)
oct:将十进制转换为八进制
num = 13
v1 = oct(num)
print(v1)
int:将十进制转换为十进制
num = 13
v1 = int(num)
print(v1)
hex:将十进制转换为十六进制
num = 13
v1 = hex(num)
print(v1)
二进制转换为十进制
v1 = "0b1101"
result = int(v1,base = 2)
print(result)
二进制转换为八进制
v1 = "0o1101"
result = int(v1,base = 2)
print(result)
二进制转换为十六进制
v1 = "0x1101"
result = int(v1,base = 2)
print(result)
ip地址转换成二进制数(面试)
# 1字节等于8位
# IP: 192.168.12.79 -> 001010010 . 001010010 . 001010010 . 001010010
# 1. 请将 ip = "192.168.12.79" 中的每个十进制数转换成二进制并通过,连接起来生成一个新的字符串。
# 简单版——假面试
lis = []
ip = "192.168.12.79"
var = ip.split(".")
for i in var:
new_i = int(i)
x = bin(new_i)
lis.append(x)
result = ",".join(lis)
print(result)
# 加强版——真面试
lis = []
ip = "192.168.12.79"
a = ip.split(".")
for i in a:
new_i = int(i)
var = bin(new_i)
var = var[2:]
if len(var) != 8:
var = var.rjust(8,'0')
lis.append(var)
x = "".join(lis)
print(int(x,base=2))
函数内部执行相互之间不会混乱,执行完毕+内部元素不被其他人使用
函数可以做返回值进行返回
def func():
print(123)
def bar():
return func
# bar函数加括号执行经过return返回给v,此时v为func函数,但是并没有执行
v = bar()
# v加括号,执行func函数
v()
def bar():
def inner():
print(123)
return inner
# bar函数加括号执行,将inner函数加载到内存,但是没有执行,返回inner函数
v = bar()
# 此时的v为inner函数,加括号执行
v()
函数的变量位置问题
# 此时全局变量name为大栗
name = '大栗子'
def bar():
name = '小栗子'
def inner():
print(name)
return inner
# bar函数加括号执行时,将name=大栗子修改成了name=小栗子,并保存到内存
v = bar()
# 此时v为inner函数,执行打印name为小栗子
v()
# 再来看一个
name = '糖炒栗子'
def bar(name):
def inner():
print(name)
return inner
v1 = bar('大栗') # { name=alex, inner } # 闭包,为函数创建一块区域(内部变量供自己使用),为他以后执行提供数据。
v2 = bar('小栗') # { name=eric, inner }
v1()
v2()
# 打印的name分别为大栗、小栗
带闭包、传参的面试题
# 简单版面试题
info = []
def func():
print(item)
# 此时的for循环已经结束,在内存地址中的item已经为9
for item in range(10):
info.append(func)
info[0]() # 9
# 加强版
info = []
def func(i):
def inner():
print(i)
return inner
# 循环的时候,把每个item封装到了内存地址,为后面的使用进行保留(闭包)
for item in range(10):
info.append(func(item))
# 0 1 4
info[0]()
info[1]()
info[4]()
闭包:为函数创建一块区域(内部变量供自己使用),为以后的执行提供数据
def func(name):
def inner():
print(name)
return inner
v1 = func('alex')
v1()
v2 = func('eric')
v2()
注:函数何时被创建,进而判断将变量保存到了内存地址
高阶函数:把函数当做参数传递、把函数当做返回值
总结:函数执行的流程分析
今天主要分享了函数的一些简单的应用、高级的应用、传参、lambda函数的简单使用,以及函数的相对高级的概念,什么是闭包,这些都是我们以后再敲代码的时候需要牢牢掌握的。
Python旅途——函数的应用、lambda函数、内置函数、闭包
原文:https://www.cnblogs.com/guoruijie/p/11172923.html