一、函数
1.函数的定义
(1)定义 函数是为实现某单一功能的一个代码段,可以重复使用。python之所以好学,函数功不可没。
python中有很多内置函数,比如我们熟悉的print,set、min、sum等。 (2)函数结构
def 函数名():
函数体
函数名只能包含字母、下划线和数字且不能以数字开头。 函数体为空时,可以用pass补空。pass是空语句,是为了保持程序结构的完整性。 (3)函数的调用
函数名()
(4)代码举例
def func_test01():
print("this is a func test!")
def func_test02():
pass
func_test01()
func_test02()
输入结果:
2.函数的参数
(1)必备参数 函数有几个参数,就必须传几个参数 (2)默认参数 给某个参数指定一个默认的值 (3)可变参数 args 将实参所有的位置参数接收,放置在一个元组中
def funa(*args):
pass
(4)关键字参数 kwargs:接受所有的关键字参数然后将其转换成一个字典赋值给kwargs这个形参
def funa(**kwargs):
pass
(5)代码举例
def func(a='Y', *args):
print(a)
print(args)
func('x', 2, 3, 4, 5, 7, "name:", "lhsmd")
def func1(a='Y', **args):
print(a)
print(args)
func1('j', name='lhsmd', job='engineer')
def func2(a='Y', b='g', *args, **kwargs):
print(a)
print(b)
print(args)
print(kwargs)
func2('j', name='lhsmd', job='engineer')
输出结果:
3.变量作用域
python中的变量作用域和C/C++是有区别的。 在python中,变量作用域一共有四种,分别是:
局部作用域(L)
闭包函数外的函数中(E)
全局作用域(G)
内建作用域(B)
有关详细的介绍,可以参考这篇博文,感谢分享。 python变量作用域 事实上总起来也比较简单,在实际使用时,也不会让你分辨这些东西,熟能生巧,多练才是正途。
4.一些特殊的函数
①递归函数 一个函数在内部不调用其他函数,而是调用它本身 A.必须要有一个明确的结束条件 B.每进行更深一层的递归时,问题规模相比上次递归都要有所减少 C.相邻两次重复之间有紧密联系 D.Python中的递归深度是有限制的,默认为1000 E.斐波那契数列为例,如下:
②闭包 两个函数的嵌套,内部函数使用到了外部函数的变量,这个现象就可以称之为产生闭包
在嵌套函数前提下,内部函数使用了外部函数的变量,而且外部函数返回了内部函数
构成条件:
1.函数中嵌套了一个函数
2.内层函数使用了外层函数的变量
3.外层函数的返回值是内层函数的函数名
输出结果:
③装饰器 本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象 下面为一个装饰器的例程: 输出结果: 再来看看多个装饰器的例程: 输出结果: 多个装饰器的装饰过程:离函数最近的装饰器先装饰,然后外面的装饰器再进行装饰,由内到外的装饰过程
④匿名函数 A.匿名的目的就是要没有名字,给匿名函数赋给一个名字是没有意义的 B.匿名函数的参数规则、作用域关系与有名函数是一样的 C.匿名函数的函数体通常应该是 一个表达式,该表达式必须要有一个返回值 语法: 函数名 = lambda 形参:返回值 lambda 是定义匿名函数的关键字,相当于函数的def。 调用: 结果 = 函数名(实参) 代码举例
func = lambda x:x+5
y = func(7)
print(y)
输出结果:
⑤常用内置函数 map函数: 映射函数 map(函数, 对象) 输出结果: reduce函数: 先把对象中的前两个元素取出,计算出一个值然后保存着,接下来把这个值和第三个元素进行计算。。。。。。 reduce(函数, 对象) 这里面的函数必须要两个参数,这里面的对象需要是可迭代对象 输出结果:
二、模块
1.模块的介绍和使用
什么是模块? 就是.py文件,里面定义了一些函数和变量,需要的时候就可以导入这些模块。 执行步骤: 1:在python模块加载路径中查找相应的模块文件 2:将模块文件编译成中间代码 3:执行模块文件中的代码
导入模块本质上就是执行一个.py文件
模块分类: 1.内置模块,也叫标准库,大约200个 2.第三方模块,第三方库,使用 pip install 模块名 这个指令来安装 3.自定义模块,自己在项目中定义的模块
import 使用import导入模块 import 模块名 (import 模块名 as 模块别名) from 模块名 import … (from 模块名 import * 导入模块中的所有东西) 输出结果: if name == ‘main’ 作用:用来控制py文件在不同的应用场景下执行不同的逻辑 Python中内置了全局变量__name__: 当文件被当做脚本执行时,name 等于 ‘main’ 当文件被当做模块导入时:__name__等于模块名 如下: 执行脚本: importTest.py被其他py文件调用时,如下: 如果没有if name == ‘main’,他的执行情况如下: 如果模块是直接运行的,if name == ‘main’ 下面的代码会执行 如果模块是被导入的,if name == ‘main’ 下面的代码不会执行
2.包
概念: 包就是项目结构中的文件夹/目录 包含有__init__.py文件的文件夹 作用: 包用于将不用的模块进行分类管理,包本身不具有的含义,仅用于文件分层管理
①import导入包时,首先会执行__init__.py文件的代码 ②init 的主要作用:导入这个包内的其他模块 ③不建议在init中写Python模块,尽量保证init的内容简单 ④__all__变量:一个列表,可以控制要引入的东西(模块、函数、类等) ⑤包的本质依然是模块,包里面还可以包含包
三、其他重要知识点
1.异常
当Python检测到一个错误时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的"异常" 异常种类:
AttributeError 试图访问一个对象没有的属性
IOError 输入/输出异常;基本上是无法打开文件
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 语法错误(的子类) ;代码没有正确对齐
IndexError 下标索引超出序列边界
KeyError 试图访问字典里不存在的键
KeyboardInterrupt Ctrl+C被按下
NameError 使用一个还未被赋予对象的变量
SyntaxError Python代码非法,代码不能编译
TypeError 传入对象类型与要求的不符合
ValueError 传入一个调用者不期望的值
①异常的概念:
异常是程序执行过程中出现的非正常流程现象
针对程序出现的异常现象要制定合理有效的处理方案, 不仅要避免异常现象的出现, 还要在异常出现后设计针对性的有效处理方案。
②异常的处理:
捕获异常 抛出异常
A.先来看看捕获异常:
语法格式一:
try:
可能引发异常现象的代码
except 异常类型:
出现异常现象的处理代码
例如,在编译器中建立一个.py文件,输入一个a,然后点击运行,如下: 可见,编译报了一个NameError错误, 下面我们稍微处理一下,如下: 语法格式二:
try:
可能引发异常现象的代码
except: (可以没有)
出现异常现象的处理代码
finally:
try代码块结束后运行的代码
例子如下:对比着看 case1: 输出结果: case2: 输出结果: 语法格式三:
try: 必选
可能引发异常现象的代码
except: 必选: 二选一
出现异常现象的处理代码
else: 可选
未出现异常现象的处理代码
finally: 必选:二选一
try代码块结束后运行的代码
case1: 输出结果: case2: 输出结果: B.抛出异常 步骤: a.创建一个Exception(‘xxx’)对象, xxx表示异常提示信息 b.raise抛出这个对象(异常对象) 抛出异常后,后面的代码将不再会执行。 case1: 输出结果: case2: 正确输入: 错误输入:
2.拆包
对于函数中的多个返回数据, 去掉元组, 列表 或者字典 直接获取里面数据的过程。
例程如下: 编写函数,实现接收一个字符串,分别统计大写字母、小写字母、数字、其他字符的个数,并返回结果。 输出结果:
|