1、装饰器:

#!/usr/bin/env python3

user_status = False #用户登录了就把这个改成True

def login(auth_type): #把要执行的模块从这里传进来

def auth(func):

def inner(*args,**kwargs):#再定义一层函数

if auth_type == "qq":

_username = "tom" #假装这是DB里存的用户信息

_password = "abc123" #假装这是DB里存的用户信息

global user_status

if user_status == False:

username = input("user:")

password = input("pasword:")

if username == _username and password == _password:

print("welcome login....")

user_status = True

else:

print("wrong username or password!")

if user_status == True:

return func(*args,**kwargs) # 看这里看这里,只要验证通过了,就调用相应功能

else:

print("only support qq ")

return inner #用户调用login时,只会返回inner的内存地址,下次再调用时加上()才会执行inner函数

return auth

def home():

print("---首页----")

@login('qq')

def python():

print("----python专区----")

def sql():

print("----sql专区----")

@login('weibo')

def css():

print("----css专区----")

home()

python()

运行结果:

---首页----
    user:tom
    pasword:abc123
    welcome login....
    ----python专区----

注:   参考学习地址:http://www.cnblogs.com/alex3714/articles/5765046.html

2、def w1(a):

def b(c,d):

print(111)

return b

@w1

def show():

print("show")

注:先执行w1,把自己装饰的函数的函数名当作参数,即w1(show),show 函数重新定义,w1(show) 返回值 新show= b。

注:@w1()括号内有参数,先执行w1(),然后在按上面步骤进行后续操作。

3、递归算法是一种直接或者间接地调用自身算法的过程。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。

递归算法解决问题的特点:

(1)递归就是在过程或函数里调用自身。

(2)在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。

(3)递归算法解题通常显得很简洁,但递归算法解题的运行效率较低,所以一般不提倡用递归算法设计程序。

(4)在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储,递归次数过多容易造成栈溢出等。

递归算法所体现的“重复”一般有三个要求:

一是每次调用在规模上都有所缩小(通常减半);

二是相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入);

三是在问题的规模极小时必须用直接给出解答而不再进行递归调用,因为每次递归调用都是有条件的(以规模未达到直接解答的大小为条件),无条件递归调用将会成为死循环而不能正常结束。

4、def func(arg1,arg2,stop):

if arg1 == 0:

print(arg1,arg2)

arg3 = arg1 + arg2

print(arg3)

if arg3 < stop:

func(arg2,arg3,stop)

func(0,1)

运行结果:0 1   (前两个数相加值等于下一个数,斐波那契数列。)
                   1
                   2
                   3
                   5
                   8
                   13
                   21
                   34

5、def calc(n):

print(n)

if n/2 > 1:

res = calc(n/2)

return res

calc(100)

运行结果:100 50.0 25.0 12.5 6.25 3.125 1.5625

6、def binary_search(data_source,find_n):

mid = int(len(data_source)/2)

if len(data_source) >= 1:

if data_source[mid] > find_n:

# data in left

print("data in left of [%s]" % data_source[mid])

binary_search(data_source[:mid],find_n)

elif data_source[mid] < find_n:  # data in right

print("data in right of [%s]" % data_source[mid])

binary_search(data_source[mid:],find_n)

else:

print("found find_s,",data_source[mid])

else:

print("cannot find..")

if __name__ == '__main__':

data = list(range(1,600))

print(data)

binary_search(data,400)

运行结果:data in right of [300]
                   data in left of [450]
                   data in right of [375]
                   data in left of [412]
                   data in right of [393]
                   data in left of [402]
                   data in right of [397]
                   data in right of [399]
                   found find_s, 400

7、算法:

矩阵旋转90度

#!/usr/bin/env python3

data = [[col for col in range(10)] for row in range(10)]

print(data) for row in data:

print(row)

print('-----------')

#r_index 行下标,c_index 列下标,tmp 临时存储,data[][]矩阵地址,如data[0][0]=0。

for r_index,row in enumerate(data):   #enumerate()函数用于遍历序列中的元素以及它们的下标

for c_index in range(r_index,len(row)):

tmp = data[c_index][r_index]

data[c_index][r_index] = row[c_index]

data[r_index][c_index] = tmp

print('-----------')

for r in data:

print(r)

运行结果:[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

[2, 2, 2, 2, 2, 2, 2, 2, 2, 2]

[3, 3, 3, 3, 3, 3, 3, 3, 3, 3]

[4, 4, 4, 4, 4, 4, 4, 4, 4, 4]

[5, 5, 5, 5, 5, 5, 5, 5, 5, 5]

[6, 6, 6, 6, 6, 6, 6, 6, 6, 6]

[7, 7, 7, 7, 7, 7, 7, 7, 7, 7]

[8, 8, 8, 8, 8, 8, 8, 8, 8, 8]

[9, 9, 9, 9, 9, 9, 9, 9, 9, 9]

python学习之路 第五天的更多相关文章

  1. Python学习之路 (五)爬虫(四)正则表示式爬去名言网

    爬虫的四个主要步骤 明确目标 (要知道你准备在哪个范围或者网站去搜索) 爬 (将所有的网站的内容全部爬下来) 取 (去掉对我们没用处的数据) 处理数据(按照我们想要的方式存储和使用) 什么是正则表达式 ...

  2. python学习之路-第五天-python的数据结构

    数据结构 1. 列表 例子: #!/usr/bin/python # Filename: using_list.py # This is my shopping list shoplist = ['a ...

  3. python学习之路-day2-pyth基础2

    一.        模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,第三方库存放位置:site-packages sys模块简介 导入模块 import sys 3 sys模 ...

  4. Python学习之路-Day1-Python基础

    学习python的过程: 在茫茫的编程语言中我选择了python,因为感觉python很强大,能用到很多领域.我自己也学过一些编程语言,比如:C,java,php,html,css等.但是我感觉自己都 ...

  5. python学习之路------你想要的都在这里了

    python学习之路------你想要的都在这里了 (根据自己的学习进度后期不断更新哟!!!) 一.python基础 1.python基础--python基本知识.七大数据类型等 2.python基础 ...

  6. OpenGL学习之路(五)

    1 引子 不知不觉我们已经进入到读书笔记(五)了,我们先对前四次读书笔记做一个总结.前四次读书笔记主要是学习了如何使用OpenGL来绘制几何图形(包括二维几何体和三维几何体),并学习了平移.旋转.缩放 ...

  7. Python学习之路-Day2-Python基础3

    Python学习之路第三天 学习内容: 1.文件操作 2.字符转编码操作 3.函数介绍 4.递归 5.函数式编程 1.文件操作 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个 ...

  8. Python学习之路-Day2-Python基础2

    Python学习之路第二天 学习内容: 1.模块初识 2.pyc是什么 3.python数据类型 4.数据运算 5.bytes/str之别 6.列表 7.元组 8.字典 9.字符串常用操作 1.模块初 ...

  9. python学习之路网络编程篇(第四篇)

    python学习之路网络编程篇(第四篇) 内容待补充

随机推荐

  1. .NET 实现并行的几种方式(四)

    本随笔续接:.NET 实现并行的几种方式(三) 八.await.async - 异步方法的秘密武器 1) 使用async修饰符 和 await运算符 轻易实现异步方法 前三篇随笔已经介绍了多种方式.利 ...

  2. python学习笔记1:python入门

    关于版本的选择 按照网上的说法,如果python是为了在工作中使用,选择2.7版本的.这里我选择2.7.9版本的来进行学习: Python是什么? 是一种高级的计算机程序设计语言.应用范围比较广,go ...

  3. JavaWeb_day06_Filter过滤器

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! day06 request 对象常用方法 respon ...

  4. python学习笔记(基础四:模块初识、pyc和PyCodeObject是什么)

    一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...

  5. jdk安装

    x86 和 x64的安装判别 [root@CentOS ~]# uname -aLinux CentOS 2.6.32-358.el6.i686 #1 SMP Thu Feb 21 21:50:49 ...

  6. [连载]《C#通讯(串口和网络)框架的设计与实现》- 13.中英文版本切换设计

    目       录 第十三章     中英文版本切换设计... 2 13.1        不用自带的资源文件的理由... 2 13.2        配置文件... 2 13.3        语言 ...

  7. 应用.Net+Consul维护RabbitMq的高可用性

    懒人学习的过程就是工作中老大让干啥让做啥就研究研究啥,国庆放假回来的周末老大通过钉钉给我布置了个任务, RabbitMQ高可用解决方案,我想说钉钉太坑了: 这是国庆过后9号周日晚上下班给的任务,我周一 ...

  8. java web学习总结(二十八) -------------------JSP中的JavaBean

    一.什么是JavaBean JavaBean是一个遵循特定写法的Java类,它通常具有如下特点: 这个Java类必须具有一个无参的构造函数 属性必须私有化. 私有化的属性必须通过public类型的方法 ...

  9. Bootstrap 之 Carousel

    Bootstrap 轮播(Carousel)插件是一种灵活的响应式的向站点添加滑块的方式.除此之外,内容也是足够灵活的,可以是图像.内嵌框架.视频或者其他您想要放置的任何类型的内容. 如果您想要单独引 ...

  10. Node.js 教程 06 - 函数

    前言: 本篇介绍的是Node.js中的函数,相对于上一篇会简单一点,其实和我们Javascript中的function无异. 好了,废话不多说了,我们进入正题吧. Node.js函数: [示例1:创建 ...