Python学习笔记 ---第三章
函数
函数是代码的一种抽象
| 函数 | 说明 |
|---|---|
| abs | 绝对值 |
| max | 最大值 |
| hex | 转换为16进制 |
强制数据类型转换
int('123')
123
int(12.35)
12
srt(100)
'100'
bool(1)
True
定义函数
定义一个函数,依次写出函数名,括号中的参数和冒号: 最后return返回
def my_abs(x):
if x >=0:
return x
else
return -x
*空函数 定义一个空函数
def nop()
pass
*返回多个值
import math
def move(x, y, step, angle=0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny
然会同时获得返回值
x, y = move(100, 100, 60, math.pi / 6)
print(x, y)
151.96152422706632 70.0
这只是一种假象,Python函数返回的仍然是单一值
r = move(100, 100, 60, math.pi / 6)
print(r)
(151.96152422706632, 70.0)
返回了一个tuple
*定义函数时,要确定函数名和参数个数,可以先对参数的数据类型进行检查
函数体内部可以用return随时返回函数结果,没有执行完毕也没有return语句时返回None
函数可以返回多个值,骑其实就是一个tuple
递归函数
*在函数内部调用自身就是递归函数
def fact(n):
if n == 1
return 1
return n * fact(n-1)
*递归要防止栈溢出,可以用尾递归优化防止溢出
def fact(n):
return fact_iter(n,1)
def fact_iter(num,product):
if num == 1:
return product
return fact_uter(num - 1,num*product)
return fact_iter(num - 1, num * product)仅返回递归函数本身,num - 1和num * product在函数调用前就会被计算,不影响函数调用。
使用递归函数的优点是逻辑简单清晰,缺点是过深的调用会导致栈溢出。
针对尾递归优化的语言可以通过尾递归防止栈溢出。尾递归事实上和循环是等价的,没有循环语句的编程语言只能通过尾递归实现循环。
高级函数
*切片
取出一个list中的部分元素
L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
L[0:3] #取出前三个元素,从0开始不包括3
['Michael', 'Sarah', 'Tracy']
L[-2] #倒序切片,从-1开始
['Bob', 'Jack']
建立一个0-99的数列
L = list(range(100))
L
[0,1,2,3,.....,99]
前十个,每两个取一个
L[:10:2]
[0,2,4,6,8]
所有数,每隔5个取一个
L[::5]
[0,5,10,.....,95]
tuple也可以进行切片,结果仍是一个tuple
(0,1,2,3,4,5)
[:3]
(0,1,2)
字符串'XXX'也可以看做list,可以进行切片
'ABCDEFG'[:3]
'ABC'
迭代
一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。
Python中通过for ... in 进行迭代
d = {'a':1,'b':2,'c':3}
for key in d:
print(key) #迭代出key
for value in d.values() #迭代value
for k,v in d.items() #迭代value 和key
collection模块中的lterable类型判断对象是否可以迭代
from collections import Iterable
isinstance('abc', Iterable) # str是否可迭代
True
Python内置的enumerate函数可以把一个list变成索引-元素对,在for循环中同时迭代索引和元素本身
for i, value in enumerate(['A', 'B', 'C']):
print(i, value)
0 A
1 B
2 C
任何可迭代对象都可以作用于for循环,包括我们自定义的数据类型,只要符合迭代条件,就可以使用for循环
列表生成式
list(range(1, 11))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] #生成1-10的list
生成[1x1, 2x2, 3x3, ..., 10x10]
1.循环
L = []
for x in range(1, 11):
L.append(x * x)
L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
2.list
[x*x for x in range(1,11)]
[1,4,16,25, 36, 49, 64, 81, 100]
for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方
[x*x for x in range(1,11) if x%2 == 0]
[4,16,36,64,100]
两层循环生成全排列
[m + n for m in 'ABC' n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
列表生成式可使用两个变量生成list
d = {'x':,'A','y':'B','z',:'C'}
[k + '=' + v for k,v in d.items()]
['y=B','x=A','z=C']
生成器
在Python中一边循环一边计算的机制,称为生成器:generator
把列表生成器的[]改为()就建立了一个generator
L = [x * x for x in range(10)]
g = (x * x for x in range(10))
通过next() 获得generator的下一个返回值
next(g)
0
next(g)
1
next(g)
4
然后加入for循环
g = (x * x for x in range(10))
for n in g:
print (n)
0
1
4
16
斐波拉契数列
def fib(max):
n,a,b =0,0,1
while n < max:
print(b)
a,b = b,a+b
n = n+1
return 'done'
Python学习笔记 ---第三章的更多相关文章
- python学习笔记——第三章 串
第三章 字符串学习 1.字符串不灵活, 它不能被分割符值 >>> format = "hello, %s. %s enough for ya?" >> ...
- python学习笔记第三章
1.列表是由一系列特定顺序排列得元素组成,在python中用([])组成,列表得索引是从0开始,不是1 xu=['a','b',''c] print(xu) 访问列表的元素第一个元素 xu=['a', ...
- python学习心得第三章
python学习心得第三章 1.三元运算 变量=值1 if 条件 else 值2 由图如果条件成立则赋值1给变量,如果条件不成立则赋值2给变量. 2.数据类型 集合:set() class set(o ...
- 《DOM Scripting》学习笔记-——第三章 DOM
<Dom Scripting>学习笔记 第三章 DOM 本章内容: 1.节点的概念. 2.四个DOM方法:getElementById, getElementsByTagName, get ...
- The Road to learn React书籍学习笔记(第三章)
The Road to learn React书籍学习笔记(第三章) 代码详情 声明周期方法 通过之前的学习,可以了解到ES6 类组件中的生命周期方法 constructor() 和 render() ...
- [HeadFrist-HTMLCSS学习笔记]第三章构建模块:Web页面建设
[HeadFrist-HTMLCSS学习笔记]第三章构建模块:Web页面建设 敲黑板!! <q>元素添加短引用,<blockquote>添加长引用 在段落里添加引用就使用< ...
- JVM学习笔记-第三章-垃圾收集器与内存分配策略
JVM学习笔记-第三章-垃圾收集器与内存分配策略 tips:对于3.4之前的章节可见博客:https://blog.csdn.net/sanhewuyang/article/details/95380 ...
- #Python学习笔记:1-3章 (基于《python编程,从入门到实践)
第1-3章 这个文档是记录我学习python时一些学习笔记以及一些想法也可以称作复习笔记 第一章:起步这一章主要是从第一个"hello world"程序到python环境的搭建与配 ...
- [Python学习笔记][第七章Python文件操作]
2016/1/30学习内容 第七章 Python文件操作 文本文件 文本文件存储的是常规字符串,通常每行以换行符'\n'结尾. 二进制文件 二进制文件把对象内容以字节串(bytes)进行存储,无法用笔 ...
随机推荐
- <20190104>关掉一些鸡肋的Win10功能
讨厌鬼001 # - windows defender - 本身没什么卵用, 却一直占着位置, 而且不断提示更新. 必须关闭它 . 在"运行" 中, 输入 "gp ...
- 【错误记录】PowerShell 超级无语的语法错误(令人怀疑人生)
曾经做过测试,本文是本章优秀测试人员的精神,必须定位到原因,不然吃不下饭.其实可以很容易绕过这种问题. 环境: PowerShell 5.1.16299.64 Windows 10 现有代码如下: # ...
- Html body的滚动条禁止与启用
在写一个在页面中,经验证用户没有登录或session失效时候弹出登录框禁止页面滚动用到今天搞了一个功能,上下左右居中,模仿QQ空间里的样式,把横向和纵向滚动条禁止掉代码如下:<script ty ...
- js常见错误类型
(1)SyntaxError SyntaxError是解析代码时发生的语法错误 // 变量名错误 var 1a; // 缺少括号 console.log 'hello'); (2)ReferenceE ...
- P2430 严酷的训练 题解
题目背景 Lj的朋友WKY是一名神奇的少年,在同龄人之中有着极高的地位... 题目描述 他的老师老王对他的程序水平赞叹不已,于是下决心培养这名小子. 老王的训练方式很奇怪,他会一口气让WKY做很多道题 ...
- 【转】MySQL理解索引、添加索引的原则
索引用于快速找出在某个列中有一特定值的行.不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行,还需要考虑每次读入数据页的IO开销.而如果采取索引,则可以根据索引指向的页以及记录在 ...
- QT+VS2013 1配置和安装
相关参考:http://www.cnblogs.com/ranjiewen/p/5318768.html 1下载 VS2013 微软官网查找 https://www.visualstudio.com ...
- 20145236《网络攻防》 Exp3 免杀原理与实践
20145236<网络攻防> Exp3 免杀原理与实践 一.基础问题回答 1.杀软是如何检测出恶意代码的? 恶意代码有其特有的特征码,杀软将特征码加入检测库中,当检测到一段代码中具有这样的 ...
- go标准库的学习-net/rpc
参考:https://studygolang.com/pkgdoc 导入方法: import "net/rpc" RPC(Remote Procedure Call Protoco ...
- junit常用注解详细说明
Java注解((Annotation)的使用方法是@注解名 ,能通过简单的词语来实现一些功能.在junit中常用的注解有@Test.@Ignore.@BeforeClass.@AfterClass.@ ...