上节总结

 一、上节内容补充回顾
1、lambda
func = lambda x,y: 9+x
参数: x,y
函数体:9+x ==》 return 9+x
func: 函数名 def func(x,y):
return x + 9
def func(x,y):
return x + 9 func = lambda x,y: 9+x 扩展:函数名可以当做参数传递
函数名() ==》 执行函数
函数名 ==》 代指函数 2、内置
xxx
3、open文件操作
open()
1、文件路径
2、模式
基本操作:
r,只读
w,只写(先清空)
x,不存在,创建,存在,报错: 只写
a,追加,只写,不可读
二进制
rb
wb
xb
ab
+
r+,读写:
读,0开始读取
写,先读了,往最后追加。
先读,最后追加
主动seek,写从当前指针向后写
==》 w+,读写
x+,读写
a+,读写
读,最后位置读取
写,
最后追加
主动seek,还是最后追加 r+ 最常用
3、文件操作 truncate,截取前面
read
read(1) :无b,字符,取决于打开的方式
read(1) :有b,字节,
write
str :无b,字符串
bytes :有b,字节 readline
只读取一行 readlines:
[“第一行”, "第二行"] xrealines: 2.7
for line in f.xrealines():
line f = open()
for i in f:
print(i) flush
强行刷入硬盘 close tell() 获取指针位置
seek() 跳转到某个位置 4、 whth open(xx) as f:
print 5、with open(xx) as f1 ,open(xx) as f2: 查看总结内容

函数作为参数传入另一个函数

 # 2 函数参数
def f1():
return "F1"
def f2(arg):
arg()
return 'F2' # 变量 x =123
# 函数名 f1 = 对应def f1 内存地址
# 函数名 f2 = 对应def f2 内存地址
# print(f1) # 执行f2函数,f1当传参
f2(f1)

f1,代指这个函数名,没有执行。这时f1就是一个变量,可以当作参数传入另外一个函数

f1(),去执行这个函数。

filter 方法的实现

 def myfilter(func, args):
#func,函数名,func=func_t
result = []
for i in args:
if func(i):#执行接收的函数,并获取返回值
result.append(i)
return result def func_t(x):
if x > 22:
return True
else:
return False r = myfilter(func_t, [11, 22, 33, 44, 55])
print(r) C:\Python35\python3.exe E:/py/55/learn-python/oldboy/5/myFilter.py
[33, 44, 55]

map方法实现

 def mymap(func, args):
# func=>f1函数
# args=>[11,22,33,44,55]
result = []
for i in args:
result.append(func(i)) # func(11)=》f1(11)
return result def f1(x):
return x + 100 r = mymap(f1, [11, 22, 33, 44, 55])
print(r) C:\Python35\python3.exe E:/py/55/learn-python/oldboy/5/my_map.py
[111, 122, 133, 144, 155]

1、冒泡排序

 #互换两个参数值
a1 = 123
a2 = 456 #引入temp中间值
# # temp = a1
# # a1 = a2
# # a2 = temp
# # print(a1, a2) #不引入temp
a1 = a1 + a2 #先将两个数的和赋值给其中一个
a2 = a1 - a2 #用和减去自己,就是新的值,a1
a1 = a1 - a2 #在用和减去新的另外一个数,就变换了。a2
print(a1, a2)

需求:请按照从小到大对列表 [13, 22, 6, 99, 11] 进行排序

思路:相邻两个值进行比较,将较大的值放在右侧,依次比较!

 li = [13, 22, 6, 99, 11]

 for m in range(4):     # 等价于 #for m in range(len(li)-1):
if li[m]> li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp 第一步
 li = [13, 22, 6, 99, 11]

 for m in range(4):     # 等价于 #for m in range(len(li)-1):
if li[m]> li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp for m in range(3): # 等价于 #for m in range(len(li)-2):
if li[m]> li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp for m in range(2): # 等价于 #for m in range(len(li)-3):
if li[m]> li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp for m in range(1): # 等价于 #for m in range(len(li)-4):
if li[m]> li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp
print li 第二步
 li = [13, 22, 6, 99, 11]

 for i in range(1,5):
for m in range(len(li)-i):
if li[m] > li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp 第三步
 #冒泡排序练习
li = [1, 22, 11, 55, 23, 33, 12, 56, 4, 7]
le = len(li)
while le > 0:
for i in range(le - 1):
if li[i] > li[i + 1]:
li[i] = li[i] + li[i + 1]
li[i + 1] = li[i] - li[i + 1]
li[i] = li[i] - li[i + 1]
le -= 1
print(li)

2、递归

利用函数编写如下数列:

斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368

 def func(arg1,arg2):
if arg1 == 0:
print arg1, arg2
arg3 = arg1 + arg2
print arg3
func(arg2, arg3) func(0,1)

递归中的return返回值

函数是一个功能块,该功能到底执行成功与否,需要通过返回值来告知调用者。

以上要点中,比较重要有参数和返回值:

 如下  n5 返回值 返回给其调用者  再返回给上一层调用者。  如果 n4 n3 n2 n1 其中一个不加return 则返回none
def n5():
return 5
def n4():
return n5()
def n3():
return n4()
def n2():
return n3()
def n1():
return n2() ret1 = n1()
print(ret1)

总结: return 函数()

  先调用函数,然后在return将获取的返回这返回给调用这个函数的变量

函数返回值

递归返回值图理解、

同上图类似,只不过函数名为同一个了

练习  利用递归 打印 斐波那契数列第10个数

 def func(d, a1, a2):
print(a1,a2)
if d == 10:
return a1
a3 = a1 + a2
return func(d+1, a2, a3) ret = func(1, 0, 1)
print(ret)

python基础-5 冒泡排序、递归的更多相关文章

  1. Python基础(函数-递归)

    本章内容: 深浅拷贝 函数(全局与局部变量) 内置函数 文件处理 三元运算 lambda 表达式 递归(斐波那契数列) 冒泡排序 深浅拷贝 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝 ...

  2. python基础4之递归、lambda、深浅copy

    内容概要: 一.递归 二.匿名函数 三.关于python中的深浅拷贝与赋值 一.递归 递归就是函数本身调用自己,直到满足指定条件之后一层层退出函数 递归特性: 必须有一个明确的结束条件 每次进入更深一 ...

  3. python 基础篇 16 递归和二分数查找与编码补充回顾

    编码回顾补充: 回顾编码问题:        编码相当于密码本,关系到二进制与看懂的文字的的对应关系.    最早期的密码本:        ascii码:只包含英文字母,数字,特殊字符.       ...

  4. Python基础之初识递归

    初识递归 递归的定义: 在一个函数里再调用这个函数本身,这种魔性的使用函数的方式就叫做递归. 递归的最大深度--997 递归函数不受外力的阻止会一直执行下去,python为了杜绝此类现象,强制将递归层 ...

  5. Python开发【第一篇】Python基础之函数递归

    函数递归 递归的本质: 就是一个函数调用另外一个函数. def d(): return '123' def c(): r = d() return r def b(): r = c() return ...

  6. python基础——异常处理、递归

    异常处理 while True: try: num1 = int(input('num1:')) num2 = int(input('num2:')) result = num1 + num2 exc ...

  7. Day3 - Python基础3 函数、递归、内置函数

    Python之路,Day3 - Python基础3   本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8. ...

  8. Python基础(协程函数、内置函数、递归、模块和包)-day05

    写在前面 上课第五天,打卡: 凭着爱,再回首: 一.协程函数(生成器:yield的表达式形式) 1.yield 的语句形式: yield 1 - 这种方式在 Python基础(函数部分)-day04  ...

  9. 十四. Python基础(14)--递归

    十四. Python基础(14)--递归 1 ● 递归(recursion) 概念: recursive functions-functions that call themselves either ...

随机推荐

  1. Batchsize与learning rate

    https://www.zhihu.com/question/64134994 1.增加batch size会使得梯度更准确,但也会导致variance变小,可能会使模型陷入局部最优: 2.因此增大b ...

  2. element隐藏组件滚动条scrollbar使用

    可使用 组件 <el-scrollbar></el-scrollbar> 设置 组件的样式 为 高度100% <el-scrollbar style="heig ...

  3. 弹性盒子FlexBox简介(二)

    弹性盒子属性 一.align-content属性 属性作用:用于修改flex-wrap属性行为.类似于justify-content,但它不是设置弹性子元素的对齐,而是设置各个行的对齐. 属性值: f ...

  4. 货币系统 Money Systems

    母牛们不但创建了它们自己的政府而且选择了建立了自己的货币系统.由于它们特殊的思考方式,它们对货币的数值感到好奇. 传统地,一个货币系统是由1,,, 或 ,, 和 100的单位面值组成的. 母牛想知道有 ...

  5. [HG]walk 题解

    前言 学长博客划水,抄题解,差评. 于是我来重新写一篇正常的题解,虽然解法跟标程不一样,但是复杂度是一样的. 题面 题目描述 在比特镇一共有\(n\)个街区,编号依次为\(1\)到\(n\),它们之间 ...

  6. HDU 1314 Numerically Speaking(大数加减乘除+另类二十六进制互相转换)

    原题代号:HDU 1314 原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1314 Numerically Speaking Time Limit: 2 ...

  7. Oracle--SQL程序优化案例一

    下面是存储过程的一部分程序: PROCEDURE SAP_MAN_ROUTING_SO (CITEM_ID    VARCHAR2,                                 C ...

  8. token与安全

    http://ju.outofmemory.cn/entry/134189      关于 Token,你应该知道的十件事 https://blog.csdn.net/Fabulous1111/art ...

  9. db2数据库表操作错误SQL0668N Operation not allowed for reason code "1" on table "表". SQLSTATE=57016的解决方法

    错误sql Operation not allowed for reason code "1" on table "MARKET.PURE_USER".. SQ ...

  10. linux gsensor驱动分析【转】

    本文转载自:http://blog.sina.com.cn/s/blog_89f592f501013sr2.html 本文以Bma250驱动为例子,详细介绍Gsensor设计的一个模板. gsenso ...