今日总结

  • 三元表达式
  • 各种生成式
  • 匿名函数
  • 常见重要内置函数
  • 常见内置函数

三元表达式

# 三元表达式一般是出现在那种二选一的情景下,比方说比较两个数的大小,还有单if分支判断。
eg:
 #  一般函数:
如果用户是jason,则打印管理员,否则打印DSB
 	username = input('username>>>:').strip()
    if username == 'jason':
        print('管理员')
    else:
        print('DSB')
# 三元表达式:
	username = input('username>>>:').strip()
    res = '管理员' if username == 'jason' else 'DSB'
    print(res)
    
# 值1 if 条件 else 值2
  条件如果成立的话就使用值1if前面的数据)
    条件如果不成立的话就使用值2else后面的数据)
# 三元表达式最好不要嵌套使用,因为代码的前提就是简洁易读

各种生成式(目的就是为了简化代码)

# 1.列表生成式
	主要目的就是简化代码
    eg:
        name_list = ['jason','kevin','tony','oscar','jerry']
        '将列表中所有的名字后面加上_DSB'
 # 列表生成式:res = [name+'_DSB' for name in name_list]
#			 print(res)
列表生成式复杂用法具备筛选能力
res = [name'_DSB' for name in name_list if name == 'jason']
print(res)
res = [name'_DSB' for name in name_list if name !== 'jason']
print(res)
#  操作流程是:1.先读取中间for name in name_list(相当于for循环列表),2.第二步就是判断if name == 'jason',最后再看前面的需求name'_DSB'.
# 列表生成式中值允许出现for和if,不能出现else,因为会产生歧义,for和if都能结合else
 
# 2.字典生成式
eg:
    l1 = ['name','age','pwd']
    l2 = ['jason',18,123]
   将上述两个列表分别制作成字典的键值对
res = {l1[i]: l2[i] for i in range(len(l1))}
paint(res)  # i代表元素,就是将l1与l2列表中的元素按元素所处的位置一一对应,组成键值对
# res = {'name': 'jason', 'age': 18, 'pwd': 123}
res = {l1[i]:l2[i] for i in range(len(l1)) if i == 1}
print(res) # 先将l1与l2列表组合成字典,然后再索引取值取字典里的1
# res = {'age': 18}

# 3.集合生成式
res = {i for i in range(10)}
print(res)  # 依次打印0-9,因为顾头不顾尾
res = {i for i in range(10) if i != 2}
print(res)  # 依次打印除了2的0-9的数字


匿名函数

# 匿名函数就是指函数没有函数名,需要结合其它函数一起使用
eg: lambda x:x+2
    # 普通函数  def index(x):
        		   return x + 2
    # 匿名函数   print(lambda x:x+2)
# max:统计最大值
l1 = [1,2,12,3,4,34,5,6,56,7,8,78,9,0,90,99]
print(max(l1))  # 直接获取数据集中最大的值
# print(max())只能用于数字集合,如果遇上字典的话,只会默认获取K值,而且如果K值是字符串的英文字母的话,那么它就会按照ASCII码表转成与其字母对应的数字比较比较,那样子是不准确的,所以字典的统计最大值的代码是:
print(max(info,key=lambda key:info[key]))
#拆解成普通函数就是:
def index(k):
    return info[k]
print(max(info,key=index))   # key对应的函数返回什么,max就以什么做比较的依据,比较的是v,返回的是k,key相当于是可以更改比较规则的参数

常见重要内置函数

# 1.map映射
l1 = [11,22,33,44,55]
需求:元素全部加10
	def index(n):
        return n + 10
    res = map(index,l1)
    print(list(res))  # 不能写print(res),因为返回出来之后是一个列表
 # 匿名函数:res = map(lambda x: x + 10, l1)
		   print(list(res))
# 2.zip拉链
l1 = [11,22,33,44]
l2 = ['a','b','c','d']
需求:将两个列表中的元素一一对应成对
res = zip(l1,l2)
print(list(res))
# zip能够整合多个数据集,如果数据集里面的元素个数不一致时,就依据元素个数少的整合
# 整合的话也可以使用列表生成式:
res = [(l1[i],l2[i]) for i in range(len(l1))]
print(res)

# 3.内置函数之filter过滤
l1 = [10,20,30,40,50]
需求:筛选出大于25的元素
def index(x):
    return x > 25
res = filter(index,l1)
print(list(res))
# 匿名函数:res = filter(lambda x:x>25,l1)
		  print(list(res))
    
# 4.reduce归总
l1 = [1,2,3,4]
需求:将列表中所有的元素相加
# 普通函数
def index(x,y):
    return x + y
res = reduce(index,l1)
print(res)
# 匿名函数:res = reduce(lambdax,y: x + y, l1)
		  print(res)



常见内置函数

# 1.abs():获取绝对值,不管正负数

# 2.all()与any()
l1 = [0,1,0,1,1,0,1,True]
print(all(l1))  # 结果是False,表示数据集中必须所有的元素对应的布尔值为True,返回的结果才是True
print(any(l1))  # 结果是True,表示数据集中只要有元素对应的布尔值为True,返回的结果就是True

# 3.bin(),oct(),hex():产生对应的机制数
# print(bin(100))    #0b1100100
# print(oct(100))    #0o144
# print(hex(100))    #0x64

# 4.bytes():类型转换,就是任意数据类型转二进制
# 针对编码与解码,可以使用关键字encode与decode,也可以使用bytes和str

# 5.callable():判断当前对象是否可以加括号调用
eg: name = 'a'
    def index():
        pass
    print(callable(name))   # 结果是False,变量名不能加括号调用
    print(callable(index))   # 结果是True,函数名可以加括号调用
    
# 6.chr(),ord():字符与数字的对应转换,依据ASCII码
    print(chr(65))     # A 根据数字转字符
    print(ord('A'))    # 65  根据字符转数字
    
# 7.dir()  返回数据类型可以调用的内置方法(查看对象内部可调用的属性)
print(dir(123))
print(dir('jason'))

# 8.divmod:相当于是数学里的进一法,只要有余数就进一
print(divmod(250,25))
结果是(10,0),第一个参数是整数部分,第二个是余数部分
eg:def get_page_num(total_num,page_num):  # 后面django分页器使用
       more,others = divmod(total_num, page_num)
      if others:
          more += 1
      print('需要%s页'%more)
    
 # 9.enumerate() :枚举
name_list = ['a','b','c','d']
for name in name_list:
    print(name)
# 枚举:for i, j in enumerate(name_list):
			print(i,j) # i类似于是计数,默认从0开始
    	for i,j in enumerate(name_list,start=1):
            print(i,j)  # 控制起始位置
            
 # 10.eval(),exec():识别字符串中的python代码
	# eval(res)只能识别简单的逻辑python代码
    # exec(res)能够识别具有一定逻辑的Python代码