| |
|
开发:
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基础——函数与模块 |
目录 一、函数声明函数: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写的。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年11日历 | -2024/11/15 17:52:58- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |