今天继续学习Python
函数的定义
- 函数是一段具有特定功能的、可重用的语句组
- 使用函数主要有两个目的:降低编程难度和代码重用
- Python使用def保留字定义一个函数
def<函数名>(<参数列表>):
<函数体>
return<返回值列表>
- 函数名可以是任何有效的Python标识符
- 参数列表是调用该函数是传递给它的值,可以有零个(保留圆括号)、一个或多个(用逗号分隔)
- 函数体是函数每次被调用是执行的代码
- 当需要返回值时使用保留字return和返回值刘表,否则函数可以没有return语句,在函数体结束时将控制权返回给调用者
函数调用和执行的一般形式
<函数名>(<参数列表>)
函数的调用过程
- 调用程序在调用处暂停执行
- 在调用时将实参复制给形参
- 执行函数体语句
- 函数调用结束给出返回值,程序回到调用前的暂停处继续执行
lambda函数
- lambda函数又称匿名函数,将函数名作为函数结果返回
<函数名>=lambda<参数列表>:<表达式>
lambda函数与正常函数一样,等价于下面表达式:
def<函数名>(<参数列表>):
return<表达式>
- lambda函数用于定义简单的、能够在一行内表示的函数,返回一个函数类型
f=lambda q,w,e,r:q+w+e+r
f(1,2,3,4)
10
- lambda函数用于需要函数对象的场景
函数的参数传递
函数可定义可选参数,使用参数的位置或名称传递参数值,根据函数中变量的不同作用域有不同的函数返回值方式
可选参数和可变数量参数
- 函数定义时部分参数可直接为存在默认值的参数指定默认值,当函数被调用时如果没有传入对应的参数值则使用函数定义时的的默认值替代
- 默认参数必须指向不变对象
- 函数调用时需要按顺序输入参数,可选参数必须定义在非可选参数后
dfe r(str,times=2):
print(str*times)
r("T")
TT
r("T")
TTTT
- 函数定义时可设计可变数量参数,通过在参数前加星号(*)实现
- 带有星号的可变参数只能出现在参数列表最后,调用时这些参数被单指元组类型传递到函数中
def vfunc(a,*b)
print(type(b)
for n in b:
a+=n
return a
vfunc(1,2,3,4,5)
<class 'tuple'>
15 #1+2=3;3+3=6;6+4=10;10+5=15
参数的位置和名称传递
- 函数定义时实参默认采用按照位置顺序的方式传递给函数,这种方式在参数很多的情况下可读性较差
- Python提供了按照形参名称输入实参的方式,调用函数时指定参数名称,参数之间的顺序可任意调整
函数的返回值
- return语句用来退出函数并将程序返回到函数被调用的位置继续执行
- return语句可同时将0个、1个或多个函数运算后的结果返回给函数被调用的位置
- 函数可以没有return,此时函数不返回值
- 函数也可以用return返回多个值,多个值以元组类型保存
def func(a,b):
return b,a
s=func("t",2)
print(s,type(s))
(2, 't') <class 'tuple'>
datetime库的使用
Python时间处理的标准函数库datetime提供里一批显示日期和时间的格式化方法。
datetime库概述
datetime库可以从系统中获得时间,并以用户选择的格式输出
- datetime库以格林威治时间为基础,每天由3600*24秒精准定义
datetime库以类的方式提供多种日期和时间
- datetime.date:日期表示类,坑人表示年、月、日等。
- datetime.time:时间表示类,可表示小时、分钟、秒、毫秒等。
- datetime.datetime:日期和时间表示类,功能覆盖date和time类。
- datetime.timedelta:与时间间隔有关的类。
- datetime.tzinfo:与时区有关的信息表示类。
datetime库解析(datetime类)
- datetime.datetime类的使用方式是首先创建一个datetime对象,然后通过对象的方法和属性显示时间
创建datetime对象的3种方法:
- datetime.now():返回一个datetime类型,表示当前日期和时间,精确到毫秒
>>>from datetime import datetime
>>>now=datetime.now()
>>>now
datetime.datetime(2018, 5, 13, 16, 49, 38, 627464)
- datetime.utcnow():返回一个datetime类型,表示当前日期和时间的UTC(世界标准时间)表示,精确到毫秒
>>>from datetime import datetime
>>>utcnow=datetime.now()
>>>utcnow
datetime.datetime(2018, 5, 13, 8, 53, 59, 788612)
- 直接使用datetime()构造一个日期和时间对象:datetime(Y,M,D,hour=0,minute=0,second=0,microsecond=0)
>>>some=datetime(2018,5,13,17,0,0,0)
>>>some
datetime.datetime(2018, 5, 13, 17, 0)
-创建datetime对象后,可利用该对象的属性显示时间
(以上述“some”为例)
- datetime类的常用属性
属性 | 描述 |
---|---|
some.min | 固定返回datetime的最小时间对象,datetime(1,1,1,0,0) |
some.max | 固定返回datetime的最大时间对象,datetime(9999,12,31,23,59,59,999999) |
some.year | 返回some包含的年份 |
some.month | 返回some包含的月份 |
some.day | 返回some包含的日期 |
some.hour | 返回some包含的小时 |
some.minute | 返回some包含的分钟 |
some.second | 返回some包含的秒钟 |
some.microsecond | 返回some包含的毫秒 |
- datetime类的常用时间格式化方法
属性 | 描述 |
---|---|
some.isofomat() | 采用ISO8601标准显示时间 |
some.isoweekday() | 根据日期计算星期 |
some.strftime() | 根据格式化字符串format进行格式显示的方法 |
- strftime()方法用于输出特定格式时间
格式化字符串 | 对象 | 取值范围 |
---|---|---|
%Y | 年 | 0001~9999 |
%m | 月 | 1~12 |
%B | 月名 | January~December |
%b | 月名缩写 | Jan~Dec |
%d | 日期 | 01~31 |
%A | 星期 | Monday~Sunday |
%a | 星期缩写 | Mon~Sum |
%H | 小时(24h制) | 00~23 |
%I | 小时(12h制) | 01~12 |
%p | 上、下午 | AM/PM |
%M | 分钟 | 00~59 |
%S | 秒 | 00~59 |
>>>some=datetime(2018,5,13,17,0,0,0)
>>>some.strftime("%Y年%m月%d日,%H时%M分%S秒")
'2018年05月13日,17时00分00秒'
>>>print('今天是{0:%Y}年{0:%m}月{0:%d}日'.format(some))
今天是2018年05月13日
代码复用和模块化设计
- 当代编程语言从代码层面采用函数和对象两种抽象方式,分别对应面向过程和面向对象两种编程思想
- 函数是程序的一种基本抽象方式,它将一系列代码组织起来通过命名提供其他程序使用,任何其他代码只有输入参数即可调用函数,更新函数功能时,所有被调用处的功能都被更新。
- 对象是程序的一中高级抽象方式,它将程序代码组织为更高级的类。对象包括表征对象特征的属性和代表对象操作的方法。
- 模块化设计值通过函数或对象的封装功能将程序划分成主程序、子程序和子程序间关系的表达。
- 模块化设计的两个基本要求:
- 紧耦合:尽可能合理划分功能块,功能块内部耦合紧密
- 松耦合:模块间关系尽可能简单,功能块之间耦合度低