python语法-----函数和模块的使用

一、函数

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)代码举例


# a为默认参数
def func(a='Y', *args):
    print(a)
    print(args)


# 将'x'赋值给了a,其余的参数转换为元组赋值给了args
func('x', 2, 3, 4, 5, 7, "name:", "lhsmd")


# a为默认参数
def func1(a='Y', **args):
    print(a)
    print(args)


# 将'j'赋值给了a,其余的参数转换为字典赋值给了args
func1('j', name='lhsmd', job='engineer')


# a,b为默认参数
def func2(a='Y', b='g', *args, **kwargs):
    print(a)
    print(b)
    print(args)
    print(kwargs)


# 将'j'赋值给了a,b的值为默认参数
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.拆包

对于函数中的多个返回数据, 去掉元组, 列表 或者字典 直接获取里面数据的过程。

例程如下:
编写函数,实现接收一个字符串,分别统计大写字母、小写字母、数字、其他字符的个数,并返回结果。
在这里插入图片描述
输出结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

all of the time

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值