一、三元表达式

#普通的判断大小函数
def max2(x,y):
if x > y:
return x
else:
return y res=max2(10,11)
print(res) x=12
y=11 #三元表达式仅应用于:
#1、条件成立返回 一个值
#2、条件不成立返回 一个值
语法:
return 成立得到的值 if 表达式 else 不成立得到值 #用三元表达式简写的函数表达式
def max2(x,y):
return x if x > y else y print(max2(10,11))

二、函数递归

函数递归:函数的递归调用,即在函数调用的过程中,又直接或间接地调用了函数本身

直接调用
def foo():
print('from foo')
foo() foo()
#无限循环调用foo() 间接调用
def bar():
print('from bar')
foo() def foo():
print('from foo')
bar() foo()
#无限互相调用 递归分为两个阶段
1、回溯:
注意:一定要在满足某种条件结束回溯,否则的无限递归
2、递推 总结:
1、递归一定要有一个明确地结束条件
2、没进入下一次递归,问题的规模都应该减少
3、在python中没有尾递归优化 #回溯
age(5)=age(4)+2
age)4)=age(3)+2
age(3)=age(2)+2
age(2)=age(1)+2
age(1)=18
#根据上面推导出的公式
age(n)=age(n-1)+2 # n > 1
age(n)=18 #n=1
#递归获得age5的值
def age(n):
if n == 1:
return 18
return age(n-1)+2 #age(4)+2 age(5) #递归
items=[1,[2,[3,[4,[5,[6,[7,[8,[9,[10,]]]]]]]]]]
def tell(l):
for item in l:
if type(item) is not list:
print(item)
else:
tell(item) tell(items)

三、匿名函数

#普通定义函数
# def foo(x,n): #foo=函数的内存地址
# return x ** n
#无函数名定义函数
# f=lambda x,n:x ** n
# # print(f)
# print(f(2,3))
# print(f(2,4)) #强调:
#1 匿名的目的就是要没有名字,给匿名函数赋给一个名字是没有意义的
#2 匿名函数的参数规则、作用域关系与有名函数是一样的
#3 匿名函数的函数体通常应该是 一个表达式,该表达式必须要有一个返回值
# def func(x,y,z):
# return x+y+z # lambda x,y,z:x+y+z #lambda匿名函数的应用:
#max,min,sorted,
salaries={
'egon':3000,
'alex':100000000,
'wupeiqi':10000,
'yuanhao':2000
} # 求工资最高的那个人是谁
#普通定义函数求
def get(k):
return salaries[k]
print(max(salaries,key=get)) #'egon' 3000
for k in salaries:
print(k) # 告诉max,比较的依据,k,salaries[k] #直接把匿名函数加入其中
print(max(salaries,key=lambda x:salaries[x])) #'egon' 3000 求工资最低的那个人是谁
print(min(salaries,key=lambda x:salaries[x])) 把薪资字典,按照薪资的高低排序
nums=[1,11,9]
nums=sorted(nums) #默认是升序
print(nums) salaries={
'egon':3000,
'alex':100000000,
'wupeiqi':10000,
'yuanhao':2000
}
salaries=sorted(salaries) # 默认按照字典的键排序
print(salaries) salaries=sorted(salaries,key=lambda x:salaries[x]) #默认是升序排
salaries=sorted(salaries,key=lambda x:salaries[x],reverse=True) #降序
print(salaries) 四、内置参数
# print(abs(-1))
# print(all([1,'a',True])) # 列表中所有元素的布尔值为真,最终结果才为真
# print(all('')) # 传给all的可迭代对象如果为空,最终结果为真 # print(any([0,'',None,False])) #列表中所有元素的布尔值只要有一个为真,最终结果就为真
# print(any([])) # 传给any的可迭代对象如果为空,最终结果为假 # print(bin(11)) #十进制转二进制
# print(oct(11)) #十进制转八进制
# print(hex(11)) #十进制转十六进制 # print(bool(0)) #0,None,空的布尔值为假 # res='你好egon'.encode('utf-8') # unicode按照utf-8进行编码,得到的结果为bytes类型
# res=bytes('你好egon',encoding='utf-8') # 同上
# print(res) # def func():
# pass
# print(callable('aaaa'.strip)) #判断某个对象是否是可以调用的,可调用指的是可以加括号执行某个功能 # print(chr(90)) #按照ascii码表将十进制数字转成字符
# print(ord('Z')) #按照ascii码表将字符转成十进制数字 # print(dir('abc')) # 查看某个对象下可以用通过点调用到哪些方法 # print(divmod(1311,25)) # 1311 25 # 将字符内的表达式拿出运行一下,并拿到该表达式的执行结果
# res=eval('2*3')
# res=eval('[1,2,3,4]')
# res=eval('{"name":"egon","age":18}')
# print(res,type(res)) # with open('db.txt','r',encoding='utf-8') as f:
# s=f.read()
# dic=eval(s)
# print(dic,type(dic))
# print(dic['egon']) # s={1,2,3}
# s.add(4)
# print(s) # 不可变集合
# fset=frozenset({1,2,3}) # x=111111111111111111111111111111111111111111111111111111111111111111111111111111111111
# # print(globals()) # 查看全局作用域中的名字与值的绑定关系
# # print(dir(globals()['__builtins__']))
# def func():
# x=1
# print(locals())
# # func()
# print(globals()) # 字典的key必须是不可变类型
# dic={[1,2,3]:'a'}
# 不可hash的类型list,dict,set== 可变的类型
# 可hash的类型int,float,str,tuple == 不可变的类型
# hash() def func():
"""
帮助信息
:return:
"""
pass # print(help(max)) # len({'x':1,'y':2}) #{'x':1,'y':2}.__len__() # obj=iter('egon') #'egon'.__iter__()
# print(next(obj)) #obj.__next__() # 面向对象里讲
classmethod
staticmethod
property delattr
hasattr
getattr
setattr exec isinstance
issubclass

# print(pow(2,3,3)) #2 ** 3 % 3

# l=[1,4,3,5]
# res=reversed(l)
# print(list(res))
# print(l)

# print(round(3.5))
# print(round(3.4))

# sc=slice(1,5,2) #1:5:2
# l=['a','b','c','d','e','f']
# # print(l[1:5:2])
# print(l[sc])
#
# t=(1,2,3,4,5,6,7,8)
# # print(t[1:5:2])
# print(t[sc])

# sum
# print(sum([1,2,3,4]))

# vars
# vars()

# zip
left='hello'
right={'x':1,'y':2,'z':3}

res=zip(left,right)
print(list(res))

五、列表生成式与生成器表达式

1、列表生成式
#创建一个列表往列表里添加值
l=[]
for i in range(100):
l.append('egg%s' %i)
print(l)
#列表生成式,把上方代码用列表生成式写
l=['egg%s' %i for i in range(100)]
l=['egg%s' %i for i in range(1000) if i > 10]
print(l) 2、生成器表达式
#区别,生成器表达式用小括号,切生成器表达式是一个一个值获得。
l=('egg%s' %i for i in range(1000) if i > 10)
print(next(l))
print(next(l))
# print(next(l)) 3、练习题
names=['egon','alex_sb','wupeiqi','yuanhao','lxx']
res=map(lambda x:x.upper(),names)
names=list(res)
print(names) names=['egon','alex_sb','wupeiqi','yuanhao','lxx']
names=[name.upper() for name in names]
print(names) names=['egon','alex_sb','wupeiqi','yuanhao','lxx']
names=[len(name) for name in names if not name.endswith('sb')]
print(names) nums=[]
with open('a.txt','r',encoding='utf-8') as f:
for line in f:
# print(len(line))
nums.append(len(line)) print(max(nums)) with open('a.txt','r',encoding='utf-8') as f:
nums=(len(line) for line in f) print(nums)
print(next(nums))
print(next(nums))
print(next(nums))
print(max(nums))
print(max(nums)) max((len(line) for line in f))
print(max(len(line) for line in f))
												

Python之旅.第三章.函数4.01/4.02的更多相关文章

  1. Python之旅.第三章.函数3.30

    一.迭代器 1.什么是迭代?:迭代是一个重复的过程,并且每次重复都是基于上一次的结果而来2.要想了解迭代器到底是什么?必须先了解一个概念,即什么是可迭代的对象?可迭代的对象:在python中,但凡内置 ...

  2. Python之旅.第三章.函数3.28

    一.命名关键字参数: 什么是命名关键字参数?格式:在*后面参数都是命名关键字参数特点:1 必须被传值1 约束函数的调用者必须按照key=value的形式传值2 约束函数的调用者必须用我们指定的key名 ...

  3. Python之旅.第三章.函数3.29

    一.无参装饰器 1 开放封闭原则 软件一旦上线后,就应该遵循开放封闭原则,即对修改源代码是封闭的,对功能的扩展是开放的 也就是说我们必须找到一种解决方案: 能够在不修改一个功能源代码以及调用方式的前提 ...

  4. Python之旅.第三章.函数3.27

    一.形参与实参 1.形参与实参是什么? 形参(形式参数):指的是 在定义函数时,括号内定义的参数,形参其实就变量名 实参(实际参数),指的是 在调用函数时,括号内传入的值,实参其实就变量的值 x,y是 ...

  5. Python之旅.第三章.函数3.26

    一.函数: 1.为什么要有函数?什么是函数? 1.组织结构不清晰,可读性差 2.代码冗余 3.管理维护的难度极大,扩展性 具备某一个功能的工具就是程序的中函数 事先准备工具的过程---->函数的 ...

  6. Python之旅.第四章.模块与包 4.02

    一.模块的使用之import 1 什么是模块?模块就一系统功能的集合体,在python中,一个py文件就是一个模块,比如module.py,其中模块名module2 使用模块2.1 import 导入 ...

  7. python学习心得第三章

    python学习心得第三章 1.三元运算 变量=值1 if 条件 else 值2 由图如果条件成立则赋值1给变量,如果条件不成立则赋值2给变量. 2.数据类型 集合:set() class set(o ...

  8. python学习笔记——第三章 串

    第三章 字符串学习 1.字符串不灵活, 它不能被分割符值 >>> format = "hello, %s. %s enough for ya?" >> ...

  9. 《零压力学Python》 之 第三章知识点归纳

    第三章(第一个程序)知识点归纳 编程犹如写剧本.Python函数与剧本差别不大,你可以反复调用函数,而它每次都执行预定的“脚本”(脚本也可以指整个程序). 在Python IDLE中,真正的编程是从编 ...

随机推荐

  1. JAVA面试题二

    JAVA 综合面试题 2007-08-12 目录 Java面试题整理 9 Java面向对象 9 1. super()与this()的区别? 9 2. 作用域public,protected,priva ...

  2. 论文笔记(9):Multiscale Combinatorial Grouping

    本文大致脉络: 对每张图片,作者首先使用 P. Doll´ar and C. Zitnick. Structured forests for fast edge detection. ICCV , 2 ...

  3. CyQ.data MDataTable

    前言 以前一两个月才出一篇,这三天有点变态地连续1天1篇(其实都是上周末两天写好的存货). 短期应该没有新的和此框架相关的文章要写了,这应该是最后一篇,大伙且看且珍惜. 前两篇讲数据库读写分享和分布式 ...

  4. MapReduce并行编程模型和框架

    传统的串行处理方式 有四组文本数据: "the weather is good", "today is good", "good weather is ...

  5. mui实现切换选项卡

    mui切换选项卡头目对应选项内容是webAPP应用最多的功能 引入mui文件: 引入mui-segmented-control类实现顶部头目: 引入mui-content-padded类加入各选项卡内 ...

  6. Online Judge(OJ)搭建——1、项目介绍

    项目名 Piers 在线评测 项目需求 用户: 获取题库.题目的相关信息. 在线对代码进行编译.执行.保存.返回运行(编译)结果. 总体题目评测成绩查询. 用户信息服务,包括注册.登录.忘记密码.邮箱 ...

  7. 【前端单元测试入门05】react的单元测试之jest

    jest jest是facebook推出的一款测试框架,集成了前面所讲的Mocha和chai,jsdom,sinon等功能. 安装 npm install --save-dev jest npm in ...

  8. 学习资料分享(Java第一行代码视频)<susmote.com>

    17年买了一本书,第一行代码(JAVA),李兴华编写的. 一开始我是按照书本一页一页的啃,一个点一个点的去学,虽然当时学的有些枯燥,但里面的知识点大部分还是弄的懂,只是一次偶然,因为有点质疑书上写的( ...

  9. shell 文本操作命令

    vi 编辑器中有三种状态模式  [vi 文件名(或路径+文件名)] 1.命令模式 2.输入模式 3.末行模式 三种模式间的相互转换 vi编辑器的启动与退出 直接进入编辑环境 $ vi 进入编辑环境并打 ...

  10. C语言描述栈的实现及操作(数组实现)

    一.静态数组实现 1.堆栈接口 // 一个堆栈模块接口 // 命名为stack.h #define STACK_YTPE int // 堆栈所存储值的类型 // push函数 // 把一个新值压入栈中 ...