一、三元表达式

#普通的判断大小函数
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. Liunx2:Liunx目录结构

    Liunx目录图 进入根目录,使用ll命令看一下Liunx整个根目录图: 这里面所有的目录都是买完服务器之后最初始的目录,没有进过任何加工.Liunx以树的结构组织所有目录,用一张图表示一下Liunx ...

  2. PLSQL Developer连接远程数据库的配置

    去Oracle的安装目录找到:D:\oracle\NETWORK\ADMIN这个路径下面的tnsnames.ora文件 修改文件: 这个是本地的 ORCL = (DESCRIPTION = (ADDR ...

  3. weblogic的使用

    1.怎么修改weblogic的端口 创建好域之后,去域的下面找到config.xml文件,在里面加上<listen-port>80</listen-port>即可,访问时不用加 ...

  4. Unreachable statement

    public boolean onQueryTextSubmit(String s) { if (sv != null) { // 得到输入管理对象 InputMethodManager imm = ...

  5. 32.Django form组件

    Form组件 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 创建Form类时,主要涉及到 [ ...

  6. SDN资料

    深入浅出SDN 华为SDN PPT 基于分类的软件定义网络流表更新一致性方案 SDN-网络变革的探讨 Openflow交换机初步安装测试 floodlight源码解读. Floodlight核心包源码 ...

  7. Lintcode245 Subtree solution 题解

    [题目描述] You have two every large binary trees:T1, with millions of nodes, and T2, with hundreds of no ...

  8. MapReduce浅析

    很早之前就用过Hadoop,但对MapReduce中的具体数据流向过程一直不甚明了,用Python Streamming的方式写了几个MapReduce,对这个过程有了一定的认识. 首先我们知道,Ma ...

  9. CMake 条件判断

    CMake简介 CMake 是做什么的? CMake是一套类似于automake的跨平台辅助项目编译的工具. 我觉得语法更加简单易用. CMake的工作流程 CMake处理顶级目录的CMakeList ...

  10. 边做边学入门微信小程序之仿豆瓣评分

    微信小程序由于适用性强.逻辑简要.开发迅速的特性,叠加具有海量活跃用户的腾讯公司背景,逐渐成为了轻量级单一功能应用场景的较佳承载方式,诸如电影购票.外卖点餐.移动商城.生活服务等场景服务提供商迅速切入 ...