python函数(functions)和模块(modules)和异常、断言超细讲解

本文深入探讨了Python函数的创建、调用、参数传递、返回值处理以及异常处理机制。涵盖了自定义函数、模块导入、常见异常类型和处理方法,包括try/except语句、finally语句和自定义异常抛出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数

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!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值