Python教程|变量、函数参数,异常
这个python编程教程涵盖了变量,函数,参数和异常。
请参考以下页面完成Python语言教程学习。
Python教程所述
所以page2 Python教程
Python教程page3
Python教程page4
Python教程page5
Python教程page6
程序结构和功能
我们将介绍以下这个页面上:
如何组织更大的程序,程序执行的细节,和函数和定义和工作吗
异常和错误处理。
什么是“脚本吗?”
“脚本”是一个程序,只需运行一系列的语句和停止
# program.py
语句1
statement2
statement3
…
程序结构
回忆:程序是一系列的语句序列
= 442 #米高
厚度= 0.1 *(0.001)#米(0.1毫米)
numfolds = 0
虽然厚度< =高度:
厚度=厚度* 2
numfolds = numfolds + 1
打印numfolds,厚度
打印numfolds,“折叠”
打印“最终厚度”,厚度,“米”
程序运行通过执行语句的顺序列出。
定义的东西
之前你必须定义事情总是习惯后来在一个程序中。
一个= 42
b = + 2 #已经定义要求
def广场(x):
返回x *
z =广场(b) #需要定义广场
顺序很重要
你总是把附近的变量和函数的定义开始
定义函数
最好把所有相关代码的一个“任务”都在一个地方
def read_prices(文件名):
pricesDict = {}
行开放(文件名):
字段= line.split (" ")
name =字段[0].strip (“”)
pricesDict[名字]=浮动(领域[1])
返回pricesDict
一个函数还可以简化重复操作
oldprices = read_prices (“oldprices.csv”)
newprices = read_prices (“newprices.csv”)
一个函数是什么?
一个函数的语句序列
def funcname (args):
声明
声明
…
声明
可以使用任何Python语句里面
def foo ():
导入数学
打印math.sqrt (2)
帮助(数学)
在Python中没有“特殊”语句
函数定义
函数可以定义在任何顺序
def foo (x):
酒吧(x)
def酒吧(x):
语句
函数只能被定义之前,他们实际上是在程序执行期间使用
必须定义foo (3) # foo
在文体上,是更常见的函数定义在一个“自下而上”的时尚
自底向上的风格
函数用作构建块
小/简单的块
# myprogram.py
def foo (x):
…
def酒吧(x):
…
foo (x)
…
def垃圾邮件(x):
…
酒吧(x)
…
垃圾邮件(42)#调用垃圾邮件()来做些什么
在python函数可以重新定义。
def foo (x):
返回2 * x
打印foo(2) #打印4
def foo (x, y): #重新定义foo ()。这个替代
返回x * y # foo()以上。
打印foo(2,3) #打印6
打印foo(2) #错误:foo需要两个参数
默默地重复函数定义取代了先前的定义
没有重载函数(与c++, Java)。
功能设计
功能应该很容易使用
一个函数的目的是定义代码重复操作
一些思考:
函数的输入和输出
副作用
函数参数
功能操作传递参数
def广场(x):
返回x *
参数变量的函数被调用时接受他们的价值观
一个=广场(3)
参数名称仅在函数体内部可见(本地函数)
默认参数
有时你想要一个可选的参数
def read_prices(文件名,分隔符= " "):
…
如果指定一个默认值,函数调用的参数是可选的
d = read_prices (“prices.csv”)
调用一个函数
考虑一个简单的函数
def read_prices(文件名,分隔符= " "):
…
称与“位置”参数
价格= read_prices (“prices.csv”、“,”)
关键字参数
称,“关键字”参数
价格= read_prices(文件名= " price.csv ",分隔符= "、")
在这里,你明确的名字和每个参数赋值
常见的用例:与许多可选特性函数
def排序(数据、反向= False键= None):
语句
排序(年代,反向= True)
混合参数
位置参数和关键字参数可以混合在一个函数调用
read_prices (“prices.csv”分隔符= " ")
位置参数必须先走。
基本规则:
所有必需的参数值
没有重复的参数值
返回值
返回语句返回一个值
def广场(x):
返回x *
如果没有返回值,返回
def酒吧(x):
语句
返回
一个=酒吧(4)# =没有
如果不指定/使用返回值被丢弃
广场(4)#调用方()但是丢弃的结果
多个返回值
一个函数可以返回多个值,返回一个元组
def分裂(a, b):
q = / / b #商
b r = % #余数
返回q, r #返回一个元组
使用例子:
x =除以(37岁,5)# x = (7, 2)
x, y = x = 7分(37岁,5)#,y = 2
理解变量
程序赋值变量
x = #全局变量的值
def foo ():
y = #局部变量的值
变量作业发生内外函数定义
定义的变量以外的“全球”
变量在函数“本地”
局部变量
变量在函数是私有的
def read_portfolio(文件名):
投资组合= []
行开放(文件名):
字段= line.split ()
[0]=(字段,int[1](字段),浮动(字段[2]))
portfolio.append (s)
返回组合
不能保留或访问后返回值
> > >股票= read_portfolio (“stocks.dat”)
> > >字段
回溯(最近的电话):
文件”
NameError:名字“字段”没有定义
全局变量
函数可以访问全局变量的值
分隔符= ',�
def read_portfolio(文件名):
…
行开放(文件名):
字段= line.split(分隔符)
…
修改全局变量
一个怪癖:不能修改全局变量的函数
分隔符= ','
def set_delimiter (newdelimiter):
分隔符= newdelimiter
如果你想修改一个全局变量必须在函数中声明它
分隔符= ','
def set_delimiter (newdelimiter):
全球分隔符
分隔符= newdelimiter
全球声明必须出现在使用前
更多的功能
变量参数
函数接受任意数量的参数
def foo (x, * args):
…
在这里,一个元组的参数得到传递
foo (1、2、3、4、5)
def foo (x, * args):
例子:
def print_headers(*标题):
h的标题:
打印10“% s”% h,
打印
打印(“-”* 10 + " ")* len(头)
函数接受任何关键字参数
def foo (x, y, * * kwargs):
…
额外的dict关键词获得通过
foo(2、3、国旗= True,模式=“快速”,标题=“调试”)
def foo (x, y, * * kwargs):
元组和字典
元组可以扩展到函数参数
args = (2、3、4)
foo (1 * args) #一样foo (1、2、3、4)
字典可以扩展关键字参数
kwargs = {
“颜色”:“红”,
“分隔符”:“,”,
“宽度”:400}
* * kwargs foo(数据)
#一样foo(数据、颜色=‘红色’分隔符= " ",宽度= 400)
这些都不是常用的编写库函数时除外。
错误检查
Python执行任何检查或验证函数参数类型或值
一个函数将在任何兼容的数据报表的功能
def添加(x, y):
返回x + y
如果一个函数有错误,他们会出现在运行时(异常)
例子
def添加(x, y):
返回x + y
Python还执行不检查函数的返回值
不一致的使用不会导致一个错误
def foo (x, y):
如果x:
返回x + y
其他:
返回
异常
用于信号错误
提高一个例外(提高)
如果名字不是名字:
提高RuntimeError(“名字没有找到”)
抓住一个例外(尝试)
试一试:
验证(用户名)
除了RuntimeError, e:
打印e
异常传播到第一个匹配的除外
def foo ():
试一试:
酒吧()
除了RuntimeError, e:
…
def bar ():
试:1
垃圾邮件()
除了RuntimeError, e:
…
def垃圾邮件():
欣赏()
def神交():
…
提高RuntimeError(“哇!”)
在python中有很多内置异常如下所列:
ArithmeticError
AssertionError
EnvironmentError
EOFError
ImportError
IndexError
KeyboardInterrupt
KeyError
MemoryError
NameError
ReferenceError
RuntimeError
SyntaxError
SystemError
TypeError
ValueError
异常值
大多数异常有一个相关值
关于什么问题的更多信息
提高RuntimeError(无效的用户名)
传递给变量提供的除外
试一试:
…
除了RuntimeError, e:
…
异常类型的一个实例,但经常看起来像一个字符串
除了RuntimeError, e:
打印“失败:原因”,e
捕捉多个错误
可以捕获不同类型的异常
试一试:
…
除了LookupError, e:
…
除了RuntimeError, e:
…
除了IOError,那么e:
…
除了KeyboardInterrupt, e:
…
另外,如果处理是相同的
试一试:
…
除了(IOError,那么LookupError RuntimeError), e:
抓住所有的错误
抓住任何异常
试一试:
…
除了例外:
打印“出错”
忽略一个例外(通过)
试一试:
…
除了RuntimeError:
通过……
最后声明
指定的代码必须运行无论是否发生异常
锁锁= ()
lock.acquire ()
试一试:
…
最后:
lock.release() #释放锁
通常使用妥善管理资源(特别是锁、文件等)。
程序退出
通过异常处理程序退出
提高SystemExit
提高SystemExit (exitcode)
另一种有时看到
导入系统
sys.exit ()
sys.exit (exitcode)
捕捉键盘中断(control - c)
试一试:
语句
除了KeyboardInterrupt:
语句