Python基础笔记(三)
1. 循环与流程控制
(1) for
myList1 = ["A", "B", "C", "D"]
# 正序遍历
for item in myList1:
print(item)
# 倒序遍历
for item in reversed(myList1):
print(item)
myList2 = list(range(1,5))
# [1, 2, 3, 4]
# 等效于其它语言的for(i=0; i<4; i++)
for index in range(4):
myList2.append(myList1[index])
print(myList2)
# [1, 2, 3, 4, 'A', 'B', 'C', 'D']
# 按索引遍历
for index in range(len(myList2)):
print("索引", index, "对应的元素是:", myList2[index])
for循环本质上是通过不断调用迭代器(Iterator)的next()
函数来实现的:
from collections import Iterable
myList = [3, 6, 9]
for i in myList:
print(i)
# 下面的代码与上面的for循环等效
if isinstance(myList, Iterable):
myIter = iter(myList)
while True:
try:
x = next(myIter)
print(x)
except StopIteration:
break
(2) while
myList = ["A", "B", "C", "D"]
index = 0
while index < len(myList):
print(myList[index])
index += 1
(3) break和continue
myList = list(range(10))
# 循环到5后跳出
index = 0
while True:
print(myList[index])
if index==5:
break
index += 1
# 循环遇到偶数略过,只打印奇数
for item in myList:
if int(item)%2==0:
continue
print(item)
2. 函数
# 定义一个空函数
def voidFun():
pass
# 定义一个求和函数
def getSum(x, y):
if not isinstance(x, (int, float)) and isinstance(y, (int, float)):
raise TypeError("参数'x'和'y'必须为数字")
return x + y
# 定义一个同时返回最大和最小值的函数
def getMinAndMax(x, y, z):
return min(x, y, z), max(x, y, z)
print(voidFun())
# None
print(getSum(3, 5))
# 8
multiValue = getMinAndMax(3, 9, 6)
print(multiValue)
# 多参数返回其实是一个Tuple
# (3, 9)
minValue, maxValue = getMinAndMax(3, 9, 6)
print(minValue, maxValue)
# 3 9
默认参数示例:
def enroll(name, age, sex="male", gold=0, country="China"):
print("name:",name,"\n",
"age:",age,"\n",
"sex:",sex,"\n",
"gold:",gold,"\n",
"country:",country)
enroll("wayne", 23)
# wayne 23 male 0 China
enroll("tina", 19, "female")
# tina 19 female 0 China
enroll("andy", 28, gold=15)
# andy 28 male 15 China
默认参数需要注意的一点是:默认值最好设置为不可变值(例如字符串或数字),否则会带来意料之外的状况:
def addItemToList(myList=[]):
myList.append("End")
print(myList)
# 提供参数连续调用2次是正常的,因为每次是以新的参数值传入
addItemToList([1, 2])
addItemToList([1, 2])
# [1, 2, 'End']
# [1, 2, 'End']
# 当使用默认参数连续调用2次时,第1次已经改变了默认参数指向的List
addItemToList()
addItemToList()
# ['End']
# ['End', 'End']
针对上面的例子,可以修改默认值为None
:
def addItemToList(myList=None):
if myList is None:
myList = []
myList.append("End")
print(myList)
可变参数示例:
def getSum(*numbers):
sum = 0
for i in numbers:
sum += i
print(sum)
return sum
getSum()
# 0
getSum(1, 2, 3)
# 6
myTuple = (1, 3, 5)
getSum(*myTuple)
# 9
关键字参数示例:
def enroll(name, age, **params):
if "gold" in params:
print('传了"gold"这个参数')
print("params:",params)
enroll("wayne", 23, gold=15, sex="male")
# 传了"gold"这个参数
# params: {'gold': 15, 'sex': 'male'}
限制关键字参数必须要以key=value
的形式提供参数,它的定义是以*
分隔:
def enroll(name, age, *, gold, country):
pass
# enroll("wayne", 23, 15, country="China") 未提供关键字将报错
enroll("wayne", 23, gold=15, country="China")
如果函数中间存在一个可变参数,在这个可变参数后面的参数自动会被认定为限制关键字参数:
def enroll(name, age, *skills, gold, country):
pass
# 未提供关键字"gold"将报错
# enroll("wayne", 23, "java", "python", 15, country="China")
enroll("wayne", 23, "java", "python", gold=15, country="China")
3. 生成器(generator)
当创建一个List或Array时,当元素个数越多,则占用的内存就越高;generator能很好的解决内存占用问题,它的特点是边循环边计算,在处理类似斐波拉契数列的场合非常有用。
定义generator和定义函数比较类似,python通过判断是否含有yield
关键字来加以区分:
def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a+b
n = n + 1
for i in fib(10):
print(i)
4. 函数参数
python支持函数参数,示例如下:
def add(x, y):
return x+y
def multiply(x, y):
return x*y
def compute(x, y, fun):
return fun(x, y)
print(compute(2, 5, add))
print(compute(3, 6, multiply))
map
函数可以让一个Iterable里面的每一个元素执行同一个函数:
def square(x):
return x * x
myTuple = tuple(map(square, (2, 4, 6)))
# (4, 16, 36)
myList = list(map(str,[1, 3, 5]))
# ['1', '3', '5']
reduce
函数把一个函数作用在一个序列上,这个函数接收两个参数,reduce
把结果继续和序列的下一个元素做累计计算:
from functools import reduce
def multiply(x, y):
return x*y
result = reduce(multiply, [1, 2, 3, 4])
print(result)
# 24
lambda
表达式提供了一个更加简练的函数式语法来写匿名方法,它的调用形式是lambda argument_list: expression
,argument_list是参数列表,expression是表达式,表达式中出现的参数需要在参数列表中有定义。
用法一:将lambda函数赋值给一个变量,通过这个变量间接调用该lambda函数:
add = lambda x,y:x+y
add(3,5)
用法二:将lambda函数赋值给其他函数,从而将其他函数用该lambda函数替换:
import time
# 屏蔽sleep函数
time.sleep = lambda x:None
time.sleep(10)
print("test")
用法三:将lambda函数作为参数传递给其他函数。
myList = list(map(lambda x: x*x, [2, 3, 4]))
print(myList)
# [4, 9, 16]
filter
函数用于过滤列表,需要实现一个过滤函数:
# 过滤出奇数
def is_odd(n):
return n%2 == 1
myList = list(filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
print(myList)
# [1, 3, 5, 7, 9]
# 过滤出非空字符串
def not_empty(s):
return s and s.strip()
myList = list(filter(not_empty, ['A', '', 'B', None, 'C', ' ']))
print(myList)
# ['A', 'B', 'C']
sorted
函数用于排序,它接收3个参数:列表,key函数,reverse(正向/反向)。调用sorted函数后并不更改原列表,而是返回一个排序后的可循环列表:
# 默认按升序排列,注意字符串是以ASCII码大小来排序的
myList = ["a", "B", "c", "D"]
print(sorted(myList))
# ['B', 'D', 'a', 'c']
# 如果字符串要以"A-Z"的顺序排序,可以先将字母全部转换成大写或小写
myTuple = ("BOY", "apple", "Pig", "monkey")
print(sorted(myTuple, key=str.lower))
# ['apple', 'BOY', 'monkey', 'Pig']
# 按绝对值的倒序排序
myList = [15, 23, -9, 100, -36]
print(sorted(myList, key=abs, reverse=True))
# [100, -36, 23, 15, -9]
Python基础笔记(三)的更多相关文章
- Python基础笔记系列十一:标准输入输出、文件读写和指针等操作
本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! 标准输入输出一.输入 在sublime中这个时候需要安装SublimeRE ...
- Python 基础语法(三)
Python 基础语法(三) --------------------------------------------接 Python 基础语法(二)------------------------- ...
- Python基础笔记系列一:基本工具与表达式
本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! 工具基础(Windows系统下)传送门:Python基础笔记系列四:工具的 ...
- Python基础知识(三)
Python基础知识(三) 一丶整型 #二进制转成十进制的方法 # 128 64 32 16 8 4 2 1 1 1 1 1 1 1 例如数字5 : 101 #十进制转成二进制的方法 递归除取余数,从 ...
- Python基础学习三
Python基础学习三 1.列表与元组 len()函数:可以获取列表的元素个数. append()函数:用于在列表的最后添加元素. sort()函数:用于排序元素 insert()函数:用于在指定位置 ...
- Python 学习笔记三
笔记三:函数 笔记二已取消置顶链接地址:http://www.cnblogs.com/dzzy/p/5289186.html 函数的作用: 給代码段命名,就像变量給数字命名一样 可以接收参数,像arg ...
- 我的Python基础笔记
Python是从刚开始参加工作,就有听各方面的测试大牛推崇,但是刚开始做测试时还是把基础的测试方法放在第一位来学习的,直到半年多以后才开始接触Python. 我的Python基础主要是以廖雪峰老师的在 ...
- Python基础 第三章 使用字符串(3)字符串方法&本章小结
字符串的方法非常之多,重点学习一些最有用的,完整的字符串方法参见<Python基础教程(第三版)>附录B. 模块string,虽然风头已小,但其包含了一些字符串方法中没有的常量和函数,故将 ...
- 19.python基础试题(三)
转载: 老男孩 Python 基础知识练习(三):https://www.cnblogs.com/nulige/p/6128674.html 1.列举布尔值为 False 的值空,None,0, Fa ...
随机推荐
- 弹指之间 -- Folk Rock
CHAPTER 17 民谣摇滚 Folk Rock 以8Beat为主,120左右的速度最能表现此节奏特色. 示例曲目: 略
- final的用法---java基础知识
Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量. final类不能被继承,没有子类,final类中的方法默认是final的. final方法 ...
- OpenStack 云主机深入了解(十四)
云主机深入了解 1.云主机在计算节点以进程方式运行 2.监听vnc的端口,vnc默认端口从5900开始, 多台云主机,端口递增 3.云主机桥接网卡,与宿主机联通网络 提示:在openstack环境下, ...
- IIS发布MVC出错
一个MVC网站在发布到IIS上时,出现了这个问题: 然后解决办法: 然后应用程序池那里,自己点右键添加一个 新建完应用池之后选中点高级设置 最后,添加网站,添加网站的时候应用程序池选择自己刚刚新建的那 ...
- HDU 3537 基础翻硬币模型 Mock Turtles 向NIM转化
翻硬币游戏,任意选3个,最右边的一个必须是正面.不能操作者败. 基本模型..不太可能自己推 还是老实记下来吧..对于单个硬币的SG值为2x或2x+1,当该硬币的位置x,其二进制1的个数为偶数时,sg= ...
- javascript鼠标拖拽的那些事情
<html> <head> <title>javascript鼠标拖拽的那些事情</title> <meta http-equiv="C ...
- JD m站自我解析理解
第一步:从首页着手 文档部分:应用的是H5默认文档开头 即:<!DOCUMENT html> head部分:放了一些相关的JS,title描述,然后就是meta表述了.比较有参考的如下 & ...
- 20155338 2016-2017-2 《Java程序设计》第7周学习总结
20155338 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 本周学习了第十二章和第十三章的内容,我重点学习了第十三章时间与日期的相关内容. 时间的度量: ...
- windows环境命令行创建虚拟环境
1:安装virtualenv pip install virtualenv 2:创建并激活虚拟环境 #创建虚拟环境 D:\>mkdir xianmu D:\>cd xianmu D:\xi ...
- mysql主从复制跳过复制错误【转】
跳过复制错误 mysql因为binlog机制问题,有些时候会出现从库重放sql执行失败的情况,特别是旧的STATEMENT模式最容易出现这种情况(因为函数和存储过程等原因),这也是为什么强调使用mix ...