函数的基本结构
参数
返回值
默认返回: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()
a = 123
name = '老男孩'
nums = [11,22,33]
data = nums
def func():
pass #100行代码
# func = 函数
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}
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('输入错误')
用于表示简单的函数
# 三元运算,为了解决简单的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)
自定义函数
内置函数
len()
open()
range()
id()
type()
输入输出
强制转换
数学相关
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))
原文:https://www.cnblogs.com/elliottwave/p/12521810.html