IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python基础——函数与模块 -> 正文阅读

[Python知识库]Python基础——函数与模块

目录

一、函数

声明函数:

调用函数:

可变和不可变类型:

参数:

build-in函数:

作用域:

函数式编程:

二、模块

Python 的内置模块

模块搜索路径:

模块导入:

Python 的内置模块 - os

Python 的内置模块 - sys

包:


一、函数

声明函数:

def关键字加上函数的名字再跟上函数的参数列表。

调用函数:

? 使用 ( ) 进行调用。
? 没有 ( ) , 不进行调用。
? 一切皆是对象 ,函数也是对象

可变和不可变类型:

可变类型 :

changeme函数接收列表对象,是可变对象。调用changeme函数时就会把{1,2,3,4}加到300后面,会改变其值。
不可变类型 :

changeInt函数接收了整数对象,把整数重新赋值,调用方的值是不会发生变化的。

参数:

1.必备参数
定义:

?调用:

可以直接把实际参数直接传入,也可以先写参数名称再用赋值符号跟上参数的值。

2. 默认参数

?例题中有三种情况,总的来说就是,传入的有实际参数输出的就是传入的值,没有实际参数传入就是输出的默认值。

3. 可变参数
Python中支持可变长度的参数

?这个函数的功能是打印出必选参数a,再打印出可变长参数args,以及变长参数kwargs。

第一种只传入必选参数,a=1 args为空,键值对kwargs也是没有;

第二种是传入了必选参数a和键值对的方式参数是分配给kwargs的;

第四种就是第一个参数分配给必选参数a,其余的都分配给可变长参数args,直到遇到键值对参数分配给kwargs。
注意:看输出的内容我们可以发现,args=(),加上*后*args就是list,而不加*就相当于是个元祖。
4. 可变参数调用

?例:

?根据题中的意思:首先输出x,y,z的值,对应1,2,3,;

然后进入传参到param的for循环,可以在输出框中看到依次对应的三个参数;

最后就是传参到params的for循环,可以在输出框中看到依次对应的三组键值对。

build-in函数:

?

作用域:

?这个例题中全局变量和局部变量的名字相同,但是最后输出的是不同的结果。

? 全局变量大写首字母,局部变量全小写。
? 不要使用Built-in和关键字作变量/函数名。
? python中print函数需要返回值,如果你在print函数中所放的函数没有返回值,那么print将会return None。

函数式编程:

概念:他会通过不断嵌套的调用函数产生你想要的结果,这种思路是通过函数的叠加产生复杂和高级的功能。在函数式编程的方式下,你所定义的函数它可以接收一个函数作为输入,也可以返回一个函数作为输出。

函数式编程 vs 面向对象编程
? First-class function(既能接收一个函数作为输入,又能返回一个函数 ),简化很多设计模式
? 更简单的函数 – 更好编写和维护
? 更容易做单元测试
? 更容易跨线程,跨进程,甚至跨机器执行任务
接下来来看一个例题:

这里定义了一个filter函数,可以看出能传一个函数和一个序列进去,函数的作用是通过一个函数来过滤这个序列。

?

?现在有一个函数foo:只要偶数,还有一个序列a,把它们放到filter中就可以把a中所有偶数都挑选出来。

那么在这个过程中我们需要定义一个函数foo,然后再传到filter中作为一个参数,但是可能这个函数在全局中只需要用一次,那么把它作为一个全局变量就会有点得不偿失,那么我们应该怎么做呢?

我们可以使用匿名函数来替代

?我们可以使用一个lambda关键字,函数本身没有名字是一个匿名函数。主要形式是lambda关键词后面跟上参数,在冒号之后写这个函数要完成的功能。

优势:结构体简单,函数体简短场景适用 即用即弃。
一些常见应用场景
from functools import reduce
a = [ 0 , 1 , 2 , 3 , 4 , 5 ]
filter_result = list ( filter ( lambda x: x % 2 == 0 , a))? ?把满足lambda函数的数都从列表中过滤出来
map_result = list ( map ( lambda x: x ** x, a))? ??把lambda函数施加到后面list的每一个元素上面
reduce_result = reduce( lambda a, b: a + b, a, 0 )? ?用于缩减序列,缩减的方式是通过lambda函数提供的功能,比如这里是求和,0是他们和的最初值。
print ( 'filter_result: %s, map_result: %s, reduce_result: %s' % (filter_result, map_result,
reduce_result))
# filter_result: [0, 2, 4], map_result: [1, 1, 4, 27, 256, 3125], reduce_result: 15
reduce(function, sequence[, initial]) -> value,function=lambda a, b: a + b, sequnce=a,intial=0
sequence连续使用function, 如果不给出initial, 则第一次调用传递sequence的两个元素, 以后把前一次调用的结果和sequence的下一个元素传递给function. 如果给出initial, 则第一次传递initial和sequence的第一个元素给function。

二、模块

Python 的内置模块

? datetime是Python处理日期和时间的标准库。
? collections是Python内建的一个集合模块,提供了许多有用的集合类。
? Base64是一种用64个字符来表示任意二进制数据的方法。
? hashlib提供了常见的摘要算法,如MD5,SHA1。
? itertools提供了非常有用的用于操作迭代对象的函数。
? urllib提供了一系列用于操作URL的功能
? HTMLParser来非常方便地解析HTML
模块导入实例:
import??

import关键字导入一个模块,这里导入的是time模块,time模块的名字调用time方法,我们就将获取当前的时间,这个获取的是起始时间到现在的秒数,起始时间是1970年的一月一号。

import还有第二种调用方法:from.....import.....

?

from+time模块+import+time函数,就可以直接调用time函数,也可以在导入的时候取一个新名字,就要多加as。

sys.path:

?

?对于内置模块而言,是通过系统的路径来搜索的,首先从当前目录下搜索,然后再从系统环境下去搜索,再从Python的安装环境下去搜索。

模块搜索路径:

当导入一个模块,Python 解析器对模块位置的搜索顺序是:
1、当前目录。
2、如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录。
3、如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/。
模块搜索路径存储在 system 模块的 sys.path 变量中。变量里包含当前目录,PYTHONPATH和由
安装过程决定的默认目录。

模块导入:

? python 中,当一个 module 作为整体被执行时,moduel.__name__ 的值是 "__main__"
? 当一个 module 被其它 module 引用时, module.__name__ 将是module 自己的名字;
? 当然一个 module 被其它 module 引用时,其本身并不需要一个可执行的入口main 了。

Python 的内置模块 - os

? os模块,用于提供系统级别的操作
? os.getcwd()
获取当前工作目录,即当前python脚本工作的目录路径
? os.chdir("dirname")
改变当前脚本工作目录;相当于shell下cd
? os.curdir
返回当前目录: ('.')
? os.pardir
获取当前目录的父目录字符串名:('..')
? os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,
依此类推
? os.mkdir('dirname')
生成单级目录;相当于shell中mkdir dirname
? os.rmdir('dirname')
删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir
dirname
? os.remove()
删除一个文件
? os.rename("oldname","newname") 重命名文件/目录
? os.sep
输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
? os.linesep
输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"

Python 的内置模块 - sys

? sys模块提供了一系列有关Python运行环境的变量和函数
? sys.argv
命令行参数List,第一个元素是程序本身路径
? sys.exit(n)
退出程序,正常退出时exit(0)
? sys.version
获取Python解释程序的版本信息
? sys.maxint
最大的Int值
? sys.path
返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
? sys.platform
返回操作系统平台名称
? sys.stdout.write('please:')
? val = sys.stdin.readline()[:-1]

包:

假设您开发了一个包含许多模块的非常大的应用程序。随着模块数量的增长,如果将它们转储
到一个位置,就很难跟踪所有这些模块。如果它们具有相似的名称或功能,则尤其如此。你可
能希望有一种方法来分组和组织它们。
包允许使用点表示法对模块名称空间进行分层结构。与模块帮助避免全局变量名之间的冲突一
样,包也有助于避免模块名之间的冲突。
创建包非常简单,因为它利用了操作系统的分层文件结构。如下:

你只要创建了一个文件夹,你就创建了一个包,在图中pkg包中有两个模块。

注:文章是根据【蓝鲸】2021秋季全新SaaS开发实战课?里的PPT写的。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 17:36:49  更:2022-04-18 17:43:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 12:37:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计