python入门(三):分支、循环、函数
1.分支
if循环格式:
if condition_1:
statement_block_1
elif condition_2:
statement_block_2
else:
statement_block_3
以下实例 x 为 0-99 取一个数,y 为 0-199 取一个数,如果 x>y 则输出 x, 如果 x 等于 y 则输出 x+y,否则输出y。
#!/usr/bin/python3
import random
x = random.choice(range(100))
y = random.choice(range(200))
if x > y:
print('x:',x)
elif x == y:
print('x+y', x + y)
else:
print('y:',y)
2.循环
1、while循环格式:
while condition_1 :
<statements>
#!/usr/bin/python3 count = 0 while count < 5: print (count, " 小于 5") count = count + 1 else: print (count, " 大于或等于 5")
2、for循环的一般格式如下:
for <variable> in <sequence>:
<statements>
else:
<statements
3、range()函数
如果你需要遍历数字序列,可以使用内置range()函数,range以指定数字开始并指定不同的增量(第三个参数)。它会生成数列(列表),而xrang则会返回一个iterable对象。
ps:break 语句可以跳出 for 和 while 的循环体。
continue语句被用来告诉Python跳过当前循环块中的剩余语句,然后继续进行下一轮循环。
pass是空语句,是为了保持程序结构的完整性。pass 不做任何事情,一般用做占位语句。
4、迭代器
迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。
对于原生支持随机访问的数据结构(如tuple、list),迭代器和经典for循环的索引访问相比并无优势,反而丢失了索引值(可以使用内建函数enumerate()找回这个索引值)。但对于无法随机访问的数据结构(比如set)而言,迭代器是唯一的访问元素的方式。
另外,迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素。迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁。这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个G的文件,或是斐波那契数列等等。
迭代器更大的功劳是提供了一个统一的访问集合的接口,只要定义了__iter__()方法对象,就可以使用迭代器访问。
迭代器有两个基本的方法:
- next方法:返回迭代器的下一个元素
- __iter__方法:返回迭代器对象本身
5、生成器
使用了 yield 的函数被称为生成器(generator),生成器是一个返回迭代器的函数。
def fibonacci(n): # 生成器函数 - 斐波那契
a, b, counter = 0, 1, 0
while True:
if (counter > n):
return
yield a
a, b = b, a + b
counter += 1
f = fibonacci(10) # f 是一个迭代器,由生成器返回生成
while True:
try:
print (next(f), end=" ")
except StopIteration:
sys.exit()
ps:在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。
3.函数
1、一般函数(def)
在python中函数定义的格式如下:
def 函数名(形参):
函数体内部代码块
函数的调用使用 函数名(实参) 就可以调用函数了。
**参数分类
- 必须参数:调用时传递的参数按顺序一一对应形参。
def f(name,age):
print(name,age)
f("小明",18)
2.关键字参数:调用时指定参数的名称,且与函数声明时的参数名称一致。
def f(name,age,sex="male"):
print(name,age,sex)
f(age=18,name="小明")
3.默认参数:是在函数声明的时候,可以给某个参数指定默认值。
def f(name,age,sex="male"):
print(name,age,sex)
f(name="小明",18)
4.不定长参数 *args:可以传入不定长参数,将这些参数放到一个tuple里面,可以通过访问args来获取这些不定长参数。
def f(name,*args):
print(args)
f("小明",18,"male")
5.不定长参数 **kwargs:相当于关键字参数的不定长参数,该参数可以接收不定长的命名变量参数,将这些参数放到一个字典里面,可以通过key获取到相应的参数值。
def f(name,**kwargs):
print(kwargs)
f("小明",age=18,sex="male")
2、匿名函数,意即不再使用 def 语句这样标准的形式定义一个函数。
lambda 只是一个表达式,函数体比 def 简单很多。
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
lambda 函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
4.Python函数的作用域
一共有4中,分别是:
L (Local) 局部作用域
E (Enclosing) 闭包函数外的函数中
G (Global) 全局作用域
B (Built-in) 内建作用域
以 L –> E –> G –>B 的规则查找 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域
当内部作用域想访问修改外部作用域的变量时,就要用到global和nonlocal关键字了(nonlocal能用在嵌套作用域,而gobal不行)。
5.闭包
如果在一个内部函数里,对在外部作用域的自由变量(外部函数的参数)进行引用,那么内部函数就被认为是闭包(closure)。一个闭包就是你调用了一个外部函数,会返回了一个内部函数给你,这个返回的函数就叫做闭包。你在调用外部函数的时候传递的参数就是自由变量。
在Python中创建一个闭包可以归结为以下三点:
- 闭包函数必须有内嵌函数
- 内嵌函数需要引用该嵌套函数上一级namespace中的变量
- 闭包函数必须返回内嵌函数
#!/usr/bin/python def FuncX(x): def FuncY(y): return x * y return FuncY tempFunc = FuncX(3) result = tempFunc(5) print(result) result = FuncX(3)(5) print(result) # 15
一种特殊的闭包即Python的装饰器,可以实现在代码运行期间修改函数的上下文, 即可以定义函数在执行之前进行何种操作和函数执行后进行何种操作, 而函数本身并没有任何的改变。
装饰模式有很多经典的使用场景,例如插入日志、性能测试、事务处理等等,有了装饰器,就可以提取大量函数中与本身功能无关的类似代码,从而达到代码重用的目的。下面就一步步看看Python中的装饰器。
#现在有一个简单的函数”myfunc”,想通过代码得到这个函数的大概执行时间。
import time
def deco(func):
def wrapper():
starttime=time.time()
func()
endtime=time.time()
msecs=(endtime-starttime)*1000
print("func used time %f ms"%msecs)
return wrapper
'''
def myfunc():
print("func starting...")
time.sleep(0.6)
print("func end!")
#调用闭包
print("myfunc is :",myfunc.__name__)
myfunc=deco(myfunc)
print("myfunc is :",myfunc.__name__)
myfunc()
'''
#装饰器
@deco
def myfunc():
print("func starting...")
time.sleep(0.6)
print("func end!")
print("myfunc is :",myfunc.__name__)
myfunc()
python入门(三):分支、循环、函数的更多相关文章
- python入门学习:7.函数
python入门学习:7.函数 关键点:函数 7.1 定义函数7.2 传递实参7.3 返回值7.4 传递列表7.5 传递任意数量的实参7.6 将函数存储在模块中 7.1 定义函数 使用关键字def ...
- Python入门篇-高阶函数
Python入门篇-高阶函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.高级函数 1>.First Class Object 函数在Python中是一等公民 函数也 ...
- 大爽Python入门教程 3-3 循环:`for`、`while`
大爽Python入门公开课教案 点击查看教程总目录 for循环 可迭代对象iterable 不同于其他语言. python的for循环只能用于遍历 可迭代对象iterable 的项. 即只支持以下语法 ...
- Python入门:for循环、while循环
Python中有两种循环,分别为:for循环和while循环. 1. for循环 for循环可以用来遍历某一对象(遍历:通俗点说,就是把这个循环中的第一个元素到最后一个元素依次访问一次).for循环的 ...
- Python 入门(七)函数
什么是函数 我们知道圆的面积计算公式为: S = πr² 当我们知道半径r的值时,就可以根据公式计算出面积.假设我们需要计算3个不同大小的圆的面积: r1 = 12.34 r2 = 9.08 r3 = ...
- python入门:while 循环的基本用法
#!/usr/bin/env python # -*- coding:utf-8 -*- #while 循环的作用 import time while True: ") time.sleep ...
- TypeScript入门三:TypeScript函数类型
TypeScript函数类型 TypeScript函数的参数 TypeScript函数的this与箭头函数 TypeScript函数重载 一.TypeScript函数类型 在上一篇博客中已经对声明Ty ...
- Python(三)enumerate函数
原文链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143177932 ...
- python入门:while循环里面True和False的作用,真和假
#!/usr/bin/env python # -*- coding:utf-8 -*- #while循环里面True和False的作用,真和假 """ n1等于真(Tr ...
- Python入门10 —— for循环
1.字符串依次取值 students = ['egon', 'lxx', 'alex'] i = 0 while i < 3: print(students[i]) i += 1 2.针对循环取 ...
随机推荐
- HTTP缓存策略 304
1.图解缓存 示例: 200 (from disk cache): 200 (from memory cache) MemoryCache顾名思义,就是将资源缓存到内存中,等待下次访问时不需要重新下载 ...
- openerp 6.0.2库存业务
一.复式库存(Double-Entry Stock Management)和库存移动(Stock Move) OpenERP的库存管理采取了独特的复式库存(Double-Entry Stock Man ...
- 服务器如何开启php的fsockopen函数? 使用发邮箱类
参考:http://www.daixiaorui.com/read/16.html#viewpl 服务器如何开启php的fsockopen函数?如果你要使用一些邮件的类,那么很多要求支持php的fso ...
- Java 连接 Oracle 数据库
首先要导入ojdbc6.jar 包(放在lib文件夹) 然后需要在数据库建一个student表进行测试: 连接及测试代码: import java.security.interfaces.RSAKey ...
- bootstrap学习笔记 插件概述
Bootstrap插件概览 在前面布局组件章节中所讨论的组件仅仅是个开始.Bootstrap自带的12种jQuery插件,扩展了功能,可以给站点添加更多的互动.即使您不是一名高级的js开发人员, 你也 ...
- PHP的session存储对PHP运行环境的影响
转于:http://hmw.iteye.com/blog/1704020 这个问题的引入是由于公司一个项目里需要使用单点登录的功能,为了方便起见,就使用redis来替换php默认的文件存储sessio ...
- zookeeper(六):Zookeeper客户端Curator的API使用详解
简介 Curator是Netflix公司开源的一套zookeeper客户端框架,解决了很多Zookeeper客户端非常底层的细节开发工作,包括连接重连.反复注册Watcher和NodeExistsEx ...
- 点滴积累【JS】---JS小功能(JS实现模仿微博发布效果)
效果: 思路: 利用多功能浮动运动框架实现微博效果,首先,将textarea中的属性添加到新创建的li里面然后,再将li添加到ul里面,再利用浮动运动框架将数据动态的显示出来. 代码: <hea ...
- Resources.FindObjectsOfTypeAll<T>()的坑(Ghost prefab)
今天遇到了一个Bug,因为调用Resources.FindObjectsOfTypeAll<T>()遍历整个场景,结果遍历出的对象不对.比较哈希一查果然是两个.原来prefab本身和pre ...
- WebView中input file的解决方法
public class MyWb extends Activity { /** Called when the activity is first created. */ WebView web; ...