day11

5.6 函数作为变量

def func():
   print(123)

v1=func
v1() # 123

# 易于混淆:
def func():
   return 123

func_list1 = [func,func,func]
func_list2 = [func(),func(),func()]

print(func_list1) # ['内存地址','内存地址','内存地址'] 未加括号未调用
print(func_list2) # [123,123,123] 加了括号才调用

info = {
   'k1':func,
   'k2':func(),
}

print(info)

5.7 函数作为参数

def func(a):   
   print(a)
   
func(1) # 1
func([1,2,3,4]) # [1,2,3,4] # 变量可以是任何类型

def show():  
   return 999

func(show) # 999   show的返回值是999   把999作为 参数   如果函数没有写出返回值,那么返回值为None

def func(arg):
   v1 = arg()
   print(v1)
   
def show():
   print(666)
   
func(show) # 666 None   show 打印了666,返回值None,传入参数None给func,v1=None
def func(arg):
   v1 = arg()
   print(v1)
   
def show():
   print(666)
   
result = func(show)
print(result)   # 666 None None 首先按照顺序 先调用show,打印666,返回None,传入func,V1=None,打印V1,返回None,最终再打印None

5.8 lambda 表达式

func = lambda 参数(若有): 函数体  (默认返回值赋值给函数名func,可以理解为func是一个变量)
# lambda表达式用来表示简单的函数,函数体只能有一行。

# 三元运算,为了解决简单的if else的情况,如:
if 1 == 1:
   a = 123
else:
   a = 456

a =  123  if 1 == 1 else 456

# lambda表达式,为了解决简单函数的情况,如:
def func(a1,a2):
   return a1 + 100

func = lambda a1,a2: a1+100
# 一些示例
func1 = lambda : 100

func2 = lambda x1: x1 * 10

func3 = lambda *args,**kwargs: len(args) + len(kwargs)

DATA = 100
func4 = lambda a1: a1 + DATA
v = func4(1)
print(v)


DATA = 100
def func():
   DATA = 1000
   func4 = lambda a1: a1 + DATA
   v = func4(1)
   print(v)
func()


func5 = lambda n1,n2: n1 if n1 > n2 else n2
v = func5(1111,2)
print(v)

5.9 内置函数

5.9.1 其他类

··· len() 计算长度

··· open() 打开文件

··· range() 产生序列

··· id() 查看内存地址

··· type() 查看类型

5.9.2 输入输出类

··· input() 输入

··· print() 输出

5.9.3 强制转换类

··· str()

··· int()

··· bool()

··· list()

··· tuple()

··· dict()

··· set()

5.9.4 数学相关

··· abs() 绝对值

v=abs(1)
print(v) # 1
v=abs(-1)
print(v) # 1

··· float() 转换为浮点数

v=55
v1=float(v)
print(v1) # 55.0

v=55.5
v1=int(v)
print(v1) # 55

··· max / min 最大值或最小值

v=[1,2,3,4]
v1=max(v)
v2=min(v)
print(v1) # 4
print(v2) # 1

··· sum() 求和

v=[1,2,3,4]
v1=sum(v)
print(v1) # 10

··· divmod() 求商和余数

a,b=divmod(101,5)
print(a,b) # (20,1)

# 练习题 请通过分页对数据进行展示
"""
要求:
  每页显示10条数据
  让用户输入要查看的页面:页码
"""

USER_LIST = []
for i in range(1,836):
   temp = {'name':'你少妻-%s' %i,'email':'123%s@qq.com' %i }
   USER_LIST.append(temp)

# 数据总条数
total_count = len(USER_LIST)

# 每页显示10条
per_page_count= 10

# 总页码数
max_page_num,a = divmod(total_count,per_page_count)
if a>0:
   max_page_num += 1

while True:
   pager = int(input('要查看第几页:'))
   if pager < 1 or pager > max_page_num:
       print('页码不合法,必须是 1 ~ %s' %max_page_num )
   else:
       """
      # 第1页:USER_LIST[0:10] -> 0123456789
      # 第2页:USER_LIST[10:20]
      # 第3页:USER_LIST[20:30]
      ...
      """
       start = (pager-1) * per_page_count
       end = pager * per_page_count
       data = USER_LIST[start:end]
       for item in data:
           print(item)

5.9.5 进制转换相关

··· bin() 将十进制转换为二进制

a=23
b=bin(a)
print(b)

··· oct() 将十进制转换为八进制

a=23
b=oct(a)
print(b)

··· int() 将其他进制转换为十进制

# 二进制转化成十进制
v1 = '0b1101'
result = int(v1,base=2)
print(result)

# 八进制转化成十进制
v1 = '0o1101'
result = int(v1,base=8)
print(result)

# 十六进制转化成十进制
v1 = '0x1101'
result = int(v1,base=16)
print(result)

··· hex() 将十进制转换为十六进制

a=23
b=hex(a)
print(b)
# 1字节等于8位
# IP: 192.168.12.79 -> 001010010 . 001010010 . 001010010 . 001010010

# 1. 请将 ip = "192.168.12.79" 中的每个十进制数转换成二进制并通过,连接起来生成一个新的字符串。
ip = "192.168.12.79"
ip_list = ip.split('.') # ['192','168','12','79']
result = []
for item in ip_list:
   result.append(bin(int(item)))
print(','.join(result))


# 2. 请将 ip = "192.168.12.79" 中的每个十进制数转换成二进制:
#         0010100100001010010001010010001010010 -> 十进制的值。

info='192.168.12.79'
fina='0b'
# 通过'.'分割
info_split=info.split('.')
# 通过遍历列表得到列表中每一个元素
for i in info_split:
   # 将字符串转为整形再转为二进制,
   bin_num=bin(int(i))
   # 将二进制去除0b
   str_num=bin_num[2:]
   # 凑齐八位
   if len(str_num) < 8:
       str_num=(8-len(str_num))*'0'+str_num
   # 链接所有的字符串
   fina+=str_num
print(int(fina,base=2))

# 3232238671

 

posted @ 2020-05-05 22:48  投降输一半!  阅读(234)  评论(0编辑  收藏  举报