函数
1. 函数概念
由单词组成跟随一对圆括号执行的都是一个函数调用。
如:预定义的函数
print("Hello W3cSchool!")
range(2, 20)
str(12)
range(10, 20, 3)
2. 使用 def 语句创建自己的函数
def my_func():
print("你好,Loen")
print("你好,Loen")
print("你好,Loen")
#一定要调用才能生效 代码缩进四个空格
my_func();
3. 大部分函数都有参数。
def print_with_exclamation(word):
print(word + "!")
print_with_exclamation("皮卡丘")
print_with_exclamation("可达鸭")
print_with_exclamation("小火龙")
结果:
皮卡丘!
可达鸭!
小火龙!
4. 函数参数可以在函数内部当变量使用。但是,它们不能在函数的定义之外被引用。函数内部创建的其他变量也不能在函数外部被引用。
def function(variable):
variable += 1
print(variable)
function(7)
print(variable)
结果:
8
NameError: name 'variable' is not defined
5. 某些函数(如 int 或 str)会返回一个稍后可用的值。 定义的函数可以使用 return 语句执行此操作。
def max(x, y):
if x >=y:
return x
else:
return y
print(max(4, 7))
z = max(8, 5)
print(z)
结果:
7
8
6. 一旦你从一个函数返回一个值,函数立即停止执行。返回语句之后的任何代码都不会执行。
def add_numbers(x, y):
total = x + y
return total
print("This won't be printed")
print(add_numbers(4, 5))
结果:
9
7. 函数与其他任何类型的值一样。可以将它们重新分配给变量,并在稍后由这些变量名称引用函数。
def multiply(x, y):
return x * y
a = 4
b = 8
operation = multiply
print(operation(a, b))
结果:
32
8. 函数也可以做为其他函数的参数。
def add(x, y):
return x + y
def subtract(x, y):
return x - y
def do_twice(func, x, y):
return func(func(x, y), func(x, y))
a = 5
b = 10
print(do_twice(add, a, b))
结果:
30
模块
1. 模块的定义:
模块是其他人为完成常见任务而编写的一些代码,例如生成随机数字,执行数学运算等。
使用模块的基本方法是在代码顶部添加 import 模块名 。
使用 模块名.变量 或者 模块名.函数 访问模块中的变量和函数。
如:
import random
for i in range(5):
value = random.randint(1, 6)
print(value)
结果:
2
5
1
3
2
2. 如果您只需要某个模块的某些功能,就可以使用另一种导入方式。
使用 from 模块名 import 变量名 的形式,然后变量名可以像在代码中正常定义一样使用。
from math import pi
#还可以用的导入方法
#from math import pi, sqrt
#from math import *
print(pi)
结果:
3.141592653589793
3. 尝试导入不可用的模块会引发 ImportError 错误。
import some_module
结果:
ImportError: No module named 'some_module'
4. 您可以使用 as 关键字给导入的模块或对象重命名。模块或对象名称较长或容易混淆的时候比较常用。
from math import sqrt as square_root
print(square_root(100))
5. Python 中有三种主要的模块类型:
- 你自己编写的
- 从外部来源安装的
- 还有 Python 预装的。
最后一种称为标准库,并包含许多有用的模块。
一些常用的标准库 如:
string,re,datetime,math,random,os,multiprocessing,subprocess,socket,email,json,doctest,unittest,pdb,argparse, sys
异常
1.不同的异常是由不同的原因引起的。
常见的异常:
- ImportError: 无法引入模块或包。
- IndexError: 下标索引超出序列边界;
- NameError: 使用一个还未赋予对象的变量;
- SyntaxError: 代码逻辑语法出错,不能执行;
- TypeError: 传入的对象类型与要求不符;
- ValueError: 传入一个不被期望的值,即使类型正确。
- KeyError: 试图访问你字典里不存在的键。
- IOError: 输入输出异常。
- Python还有其他一些内置的异常,比如 ZeroDivisionError 和 OSError 。
- 第三方库也经常定义自己的异常。
2.为了处理异常,并在发生异常时调用代码,可以使用 try/except 语句。
try 块包含可能会引发异常的代码。如果发生该异常,try 块中的代码将停止执行,并且 except 块中的代码将被运行。如果没有错误发生,except 块中的代码不会运行。
try:
num1 = 5
num2 = 0
print (num1 / num2)
print("计算完成")
except ZeroDivisionError:
print("发生错误")
print("您尝试进行除0操作")
结果:
发生错误
您尝试进行除0操作
3.try 语句可以有多个不同的 except 块来处理不同的异常。除了使用圆括号的块外,还可以将多个异常放入一个单独的块中,使 except 块处理所有这些异常。
try:
variable = 10
print(variable + "hello")
print(variable / 2)
except ZeroDivisionError:
print("Divided by zero")
except (ValueError, TypeError):
print("Error occurred")
结果:
Error occurred
4.没有指定任何异常的 except 语句将捕获所有错误。应该谨慎使用,因为他们可以捕捉到意想不到的错误并隐藏编程错误。
try:
word = "spam"
print(word / 0)
except:
print("发生错误")
结果:
发生错误
5. finally 语句
为了确保某些代码不管发生什么错误都运行,可以使用 finally 语句。finally 语句放置在 try/except 语句的底部。
finally 语句中的代码总是在 try 中的代码执行之后运行,可能在 except 代码块中运行。
try:
print("Hello")
print(1 / 0)
except ZeroDivisionError:
print("Divided by zero")
finally:
print("这段代码无论如何都会运行")
结果:
Hello
Divided by zero
这段代码无论如何都会运行
6.如果在前面的一个块中发生未捕获的异常,也会运行 finally 语句中的代码。
try:
print(1)
print(10 / 0)
except ZeroDivisionError:
print(unknown_var)
finally:
print("This is executed last")
结果:
1
This is executed last
ZeroDivisionError: division by zero
During handling of the above exception, another exception occurred:
NameError: name 'unknown_var' is not defined
7.引发异常
您可以使用 raise 语句引发异常。
print(1)
raise ValueError
print(2)
结果:
1
ValueError
8.引发异常可以提供一些异常的描述。
name = "123"
raise NameError("Invalid name!")
结果:
NameError: Invalid name!
9。在 except 块下,raise 语句可以在没有参数的情况下使用来重新引发发生的异常。
try:
num = 5 / 0
except:
print("An error occurred")
raise
结果:
An error occurred
ZeroDivisionError: division by zero
断言
1.使用 assert 断言是一个非常好的习惯,python assert 断言句语格式及用法很简单。在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它在运行最崩溃,不如在出现错误条件时就崩溃,这时候就需要 assert 断言的帮助。
assert 断言是声明其布尔值必须为真的判定,如果发生异常就说明表达示为假。可以理解 assert 断言语句为 raise-if-not,用来测试表示式,其返回值为假,就会触发异常。
断言是通过使用 assert 语句来执行的。
print(1)
assert 2 + 2 == 4
print(2)
assert 1 + 1 == 3
print(3)
结果:
1
2
AssertionError
2.如果断言失败,assert 可以接受第二个传递给 AssertionError 的参数。
temp = -10
assert (temp >= 0), "Colder than absolute zero!"
结果:
AssertionError: Colder than absolute zero!