射频和无线供应商和资源的家

一站式满足您的射频和无线需求

Python教程|变量,函数,参数,异常

本python编程教程涵盖了变量、函数、参数和异常。

参考以下页面学习完整的Python语言教程。
Python教程page1
Python教程page2
Python教程page3
Python教程第4页
Python教程第5页
Python教程第6页

项目组织与职能

本页将介绍以下内容:

如何组织更大的程序,程序执行的细节,定义和使用函数和
异常和错误处理。


什么是“脚本”?

“脚本”是一个简单地运行一系列语句并停止的程序

# program.py

语句1
statement2
statement3
...


程序结构

回想一下:程序是语句序列
高度= 442 #米
厚度= 0.1*(0.001)#米(0.1毫米)


Numfolds = 0
当厚度<= height:
厚度=厚度* 2
Numfolds = Numfolds + 1
打印numfolds,厚薄

打印numfolds, "需要折叠"
打印“最终厚度是”,厚度,“米”

程序通过执行语句的顺序来运行。


定义的东西

在以后在程序中使用之前,必须始终对事物进行定义。
A = 42
b = a + 2 #要求a已经定义

def广场(x):
返回x *

z = square(b) #需要定义square

顺序很重要
你几乎总是把变量和函数的定义放在开头

定义函数

将与单个“任务”相关的所有代码放在一个地方是个好主意
def read_prices(文件名):
pricesDict = {}
对于open(filename)中的行:
Fields = line.split(',')
[0].strip(' ' ')
pricesDict[name] = float(字段[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)
...

spam(42) #调用spam()来做某事


函数可以在python中重新定义。
def foo (x):
返回2 * x

print foo(2) #打印4

#重定义foo()。这个替代
返回x*y # foo()。

print foo(2,3) #打印6
print foo(2) #错误:foo有两个参数

重复函数定义以静默方式替换先前的定义
没有重载函数(相对于c++, Java)。


功能设计

函数应该易于使用
函数的全部意义在于为重复操作定义代码
一些需要思考的事情:
函数输入和输出
副作用

函数参数

函数对传递的参数进行操作
def广场(x):
返回x *

参数变量在函数被调用时接收它们的值
A =平方(3)

参数名只在函数体中可见(对函数来说是局部的)

默认参数

有时你需要一个可选参数
def read_prices(文件名,分隔符= " "):
...
如果赋值为默认值,则在函数调用中实参是可选的
D = read_prices("prices.csv")


调用函数

考虑一个简单的函数
def read_prices(文件名,分隔符= " "):
...
用“位置”参数调用
价格= read_prices(" Prices .csv",",")

关键字参数

使用"keyword"参数调用
价格= read_prices(文件名="price.csv",分隔符=",")
在这里,您显式地为每个参数命名并赋值
常见用例:具有许多可选特性的函数
def排序(数据、反向= False键= None):
语句

排序(年代,反向= True)

混合参数

位置参数和关键字参数可以在函数调用中混合在一起
read_prices(“prices.csv”分隔符= " ")
位置参数必须先出现。
基本规则:
所有必需的参数都得到值
无重复参数值

返回值

返回语句返回一个值
def广场(x):
返回x *
如果没有返回值,则返回None
def酒吧(x):
语句
返回

a = bar(4) # a =无

如果没有分配/使用,返回值将被丢弃
square(4) #调用square()但放弃结果

多个返回值

函数可以通过返回元组返回多个值
def分裂(a, b):
q = a // b #商
r = a % b #余数
返回一个元组

使用例子:
X =除(34,5)# X = (7,2)
X,y =除(37,5)# X = 7, y = 2

理解变量

程序给变量赋值
x = value #全局变量

def foo ():
y = value #局部变量

变量赋值发生在函数定义的外部和内部
外部定义的变量是“全局的”
函数中的变量是“局部的”

局部变量

函数中的变量是私有的
def read_portfolio(文件名):
Portfolio = []
对于open(filename)中的行:
Fields = line.split()
S = (fields[0],int(fields[1]),float(fields[2]))
portfolio.append (s)
返回组合
返回后不保留或不可访问的值
>>> stocks = read_portfolio("stocks.dat")
> > >字段
回溯(最近一次调用):
文件” ,第1行,在?
NameError: name 'fields'没有定义

全局变量

函数可以访问全局变量的值
分隔符= ','

def read_portfolio(文件名):
...
对于open(filename)中的行:
Fields = line.split(分隔符)
...

修改全局变量

一个怪癖:函数不能修改全局变量
分隔符= ','

def set_delimiter (newdelimiter):
分隔符=新分隔符

如果你想修改一个全局变量,你必须在函数中声明它
分隔符= ','
def set_delimiter (newdelimiter):
全球分隔符
分隔符=新分隔符
全局声明必须在使用前出现


更多关于函数


变量参数

函数,该函数接受任意数量的参数
def foo (x, * args):
...
在这里,参数作为元组传递
foo(1、2、3、4、5)

def foo (x, * args):

例子:
def print_headers(*标题):
头文件中的h:
打印%10s % h,
打印
Print ("-"*10 + " ")*len(headers)

接受任何关键字args的函数
def foo (x, y, * * kwargs):
...
额外的关键字在字典中传递
foo(2、3、国旗= True,模式=“快速”,标题=“调试”)

def foo (x, y, * * kwargs):


传递元组和字典

元组可以扩展为函数参数
Args = (2,3,4)
foo(1, *args) #与foo(1,2,3,4)相同
字典可以扩展为关键字参数
Kwargs = {
'color': 'red',
'delimiter': ',',
'width': 400}

* * kwargs foo(数据)
#与foo(data,color='red',delimiter=',',width=400)相同

除了在编写库函数时,通常不使用这些函数。

错误检查

Python不执行函数参数类型或值的检查或验证
函数将处理与函数中的语句兼容的任何数据
def添加(x, y):
返回x + y

如果函数中有错误,它们将在运行时显示(作为异常)
例子
def添加(x, y):
返回x + y


Python也不检查函数的返回值
不一致的使用不会导致错误
def foo (x, y):
如果x:
返回x + y
其他:
返回

异常

用于信号错误

引发异常(raise)
如果名字不在名字中:
抛出RuntimeError("Name not found")

捕获异常(尝试)
试一试:
验证(用户名)
除了RuntimeError, e:
打印e

异常传播到第一个匹配的except
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(“无效的用户名”)
传递给提供的变量except
试一试:
...
除了RuntimeError, e:
...
它是异常类型的实例,但通常看起来像一个字符串
除了RuntimeError, e:
打印“失败:原因”,即


捕获多个错误

可以捕获不同类型的异常吗
试一试:
...
除了LookupError, e:
...
除了RuntimeError, e:
...
除了IOError,那么e:
...
除了KeyboardInterrupt, e:
...
或者,如果处理相同
试一试:
...
除了(IOError,那么LookupError RuntimeError), e:


捕捉所有错误

捕获任何异常
试一试:
...
除了例外:
打印“发生错误”

忽略异常(pass)
试一试:
...
除了RuntimeError:
通过……


最后声明

指定无论是否发生异常都必须运行的代码
锁=锁()

lock.acquire ()
试一试:
...
最后:
lock.release() #释放锁

它通常用于正确地管理资源(特别是锁、文件等)。


程序退出

程序退出是通过异常处理的
提高SystemExit
提高SystemExit (exitcode)

有时会看到另一种选择
导入系统
sys.exit ()
sys.exit (exitcode)
捕捉键盘中断(Control-C)
试一试:
语句
除了KeyboardInterrupt:
语句

Python中的有用DSP代码


分享本页

翻译本页
Baidu