什么是函数?

函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码段,它能够提高应用的模块性和代码的重复利用率。

1 函数的定义和调用

Python定义函数使用def关键字,格式如下:

def 函数名(参数列表):函数体

eg:

def printInfo():print('------------------------------------')print('         人生苦短,我用Python            ')print('------------------------------------')

定义了函数之后,想要让这些代码能够执行,需要调用函数。通过“函数名()” 即可完成调用。

# 调用刚才定义的函数
printInfo()

2 函数的参数

先看一段代码:

 def add2num():c = 11+22print(c)

这个函数计算的只是固定的两个数,没有什么意义。

如果希望定义的函数,可以计算任何两个数和,我们在定义函数的时候,让函数接收数据,这就是函数的参数。

例:

#a和b就是函数的参数(形参),调用的时候,可以传入任意两个数(实参)。
def add2num(a, b):c = a+b
print(c)add2num(11, 22)


函数在被调用时会将实参按照相应的位置依次传递给形参,也就是说将第一个实参传递给第一个形参,将第二个实参传递给第二个形参,以此类推。

2.1 关键字参数的传递

关键字参数的传递是通过“形参=实参”的格式将实参与形参相关联,将实参按照相应的关键字传递给形参。

2.2 默认参数

调用函数时,如果没有传递参数,则会使用默认参数。

def printinfo( name, age = 35 ):print("Name:", name)print("Age:", age)
printinfo(name="miki" )
printinfo(age=9,name="miki" )


注意:定义函数时,带有默认值的参数一定要位于参数列表的最后面。否则程序会报错。

2.3 不定长参数

有时可能需要一个函数能处理比当初声明时更多的参数,这些参数叫做不定长参数,声明时不会命名。

def functionname([formal_args,] *args, **kwargs):
  • 加了星号(*)的变量args会存放所有未命名的变量参数,args为元组;
  • 加**的变量kwargs会存放命名参数,即形如key=value的参数, kwargs为字典。

eg1:


eg2:


eg3:


eg4:


eg5:


运行结果显示报错,这是因为a,b分别已经在之前作为函数的两个形参名,所以这里用a=和b=不合适。


3 函数的返回值

4 函数的嵌套定义

5 作用域

  • 为了避免变量的名称发生冲突,所以Python引入了命名空间的概念。
  • 命名空间指的是名称到对象的映射,类似于字典,键名是变量的名字,值是变量的值。

命名空间是相互独立存在的,而且它们被安排在某个特定的层次,把这些层次结构组合起来就是作用域

6 global和nonlocal关键字

  • 修改函数中变量时,函数中使用global关键字用于申明变量为全局变量。

  • 修改闭包函数中变量时,使用nonlocal关键字申明变量为外层函数的变量。如果不使用nonlocal关键字,外层函数变量可读但不可修改。

eg:

7 递归函数

一个函数的内部可以调用其他函数。但是,如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数。

eg:求阶乘

def fn(n):if n==1:return 1return n*fn(n-1)
print(fn(5))

8 匿名函数

匿名函数就是没有名称的函数,也就是不再使用def语句定义的函数。如果要声明匿名函数,则需要使用lambda关键字,匿名函数的声明格式如下所示:

lambda [arg1 [,arg2,.....argn]]:expression

EG:


注意:
使用Lambda声明的匿名函数能接收任何数量的参数,可以返回一个或者多个值(多个值可以用元组、列表等方式)。

9 时间函数

在Python中,通常有如下几种方式表示时间:
(1)时间戳类型;
(2)格式化的时间字符串类型;
(3)时间元组类型(struct_time)。

通常来讲,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量,返回浮点秒数。

import time  # 引入time模块
ticks = time.time()
print("当前时间戳为:", ticks)

我们可以使用time模块的strftime方法来格式化日期。

import time
# 格式化成2022-05-10 21:46:26形式
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))



时间元组:
返回struct_time类型的函数主要有gmtime()、localtime()和strptime(),struct_time元组。

time.altzone
返回格林威治西部的夏令时地区的偏移秒数。如果该地区在格林威治东部会返回负值(如西欧,包括英国)。对夏令时启用地区才能使用。

import time
print(time.altzone)

time.asctime([tupletime])
接受时间元组并返回一个可读的形式为"Tue Dec 11 18:07:14 2008"(2008年12月11日 周二18时07分14秒)的24个字符的字符串。

import time
t = (2008, 12, 11, 18, 7, 14, 1, 48, 0)
print(time.asctime(t))

time.clock( )
用以浮点数计算的秒数返回当前的CPU时间。用来衡量不同程序的耗时,比time.time()更有用。

import time
t0 = time.clock( )
#do some thing
t1 = time.clock( )
print(t1-t0)

time.ctime([secs])
作用相当于asctime(localtime(secs)),未给参数相当于asctime()。把一个时间戳(按秒计算的浮点数)转化为time.asctime()的字符串形式

import time
print(time.ctime(time.time()))
#或可转化其他时候的时间戳

time.gmtime([secs])
接收时间辍(1970纪元后经过的浮点秒数)并返回格林威治天文时间下的时间元组t。

import time
print(time.gmtime())
print(time.gmtime().tm_hour)

time.localtime([secs])
接收时间辍(1970纪元后经过的浮点秒数)并返回当地时间下的时间元组t(t.tm_isdst可取0或1,取决于当地当时是不是夏令时)

import time
print(time.localtime())
print(time.localtime().tm_year)

time.mktime(tupletime)
接受时间元组并返回时间戳,精确到整数秒

import time
print(time.mktime(time.localtime()))

time.sleep(secs)
推迟调用线程的运行,secs指秒数。
time.strftime(fmt[,tupletime])
接收以时间元组,并返回以可读字符串表示的当地时间,格式由fmt决定。

import time
t = (2009, 2, 17, 17, 3, 38, 1, 48, 0)
print(time.strftime("%b %d %Y %H:%M:%S", t))

time.strptime(str,fmt=‘%a %b %d %H:%M:%S %Y’)
根据fmt的格式把一个时间字符串解析为时间元组。

import time
struct_time = time.strptime("30 Nov 2020", "%d %b %Y")
print(struct_time)

time.time( )
返回当前时间的时间戳
time.tzset()
根据环境变量TZ重新初始化时间相关设置。

time.timezone
表示当地时区(未启动夏令时)距离格林威治的偏移秒数(>0,美洲;<=0大部分欧洲,亚洲,非洲)

import time
print(time.timezone)

time.tzname
包含一对根据情况的不同而不同的字符串,分别是带夏令时的本地时区名称,和不带的。

import time
a = time.tzname[0]
b = a.encode('latin-1').decode('gbk')
print(b)

时间类型转化关系

10 日历函数

calendar.calendar(year,m=3,w=2,l=1,c=6)
返回一个多行字符串格式的year年年历,m表示3个月一行,间隔距离为c。每日宽度间隔为w字符。每行长度为21* W+18+2* C。l是每星期行数。

import calendar
print(calendar.calendar(2022,m=3,w=2,l=1,c=6))

calendar. firstweekday()
返回当前每周起始日期的设置。默认情况下,首次载入caendar模块时返回0,即每周从星期一开始。

calendar.isleap(year)
判断year是否是闰年,如果是返回True,否则为false。

calendar.leapdays(y1,y2)
返回在Y1,Y2两年之间的闰年总数。

calendar.month(year,month,w=2,l=1)
返回一个多行字符串格式的year年month月日历,两行标题,一周一行。每日宽度间隔为w字符。每行的长度为7* w+6。l是每星期的行数。

calendar.monthcalendar(year,month)
返回一个整数的单层嵌套列表。每个子列表装载代表一个星期的整数。Year年month月外的日期都设为0;从周一开始。范围内的日子都由该月第几日表示,从1开始。

calendar.monthrange(year,month)
返回两个整数。第一个这个月的第一天是星期几,日从0(星期一)到6(星期日)。第二个是这个月的天数。

calendar.prcal(year,w=2,l=1,c=6)
相当于print(calendar.calendar(year,w,l,c))

calendar.setfirstweekday(weekday)
设置每周的起始日期码。0(星期一)到6(星期日)

calendar.prmonth(year,month,w=2,l=1)
相当于 print(calendar.monthcalendar(year,w,l,c))

calendar.timegm(tupletime)
和time.gmtime相反:接受一个6元时间元组形式,返回该时刻的时间戳(1970纪元后经过的浮点秒数)

calendar.weekday(year,month,day)
返回给定日期是周几。0(星期一)到6(星期日)

11 随机数函数

random.random()

用于生成一个0到1的随机符点数: 0 <= n < 1.0。

   import random
# 生成第一个随机数
print("random():", random.random())
# 生成第二个随机数
print("random():", random.random())

=========================================================

random.uniform(a,b)

返回a,b之间的随机浮点数,范围[a,b]或[a,b]取决 于四舍五入,a不一定要比b小。

   import random
print("random:",random.uniform(50,100))
print("random:",random.uniform(100,50))

=========================================================

random.randint(a,b)

返回a,b之间的整数,范围[a,b],注意:传入参数 必须是整数,a一定要比b小。

   import random
#生成的随机数n: 12 <= n <= 20
print(random.randint(12,20))

=========================================================

random.randrange([start], stop[, step])

返回有个区间内的整数,可以设置step。只能传入整数random.randrange(10, 100, 2),结果相当于从[10, 12, 14, 16, … 96, 98]序列中获取一个随机数。

=========================================================

random.choice(sequence)

从sequence(序列,是有序类型的)中随机获取一个元素。列表、元组、字符串都属于sequence。

random.randrange(10,100,2)
#结果等效于
random.choice(range(10,100,2))

=========================================================

random.shuffle(x[,random])

用于将列表中的元素打乱顺序,俗称为洗牌。

random.sample(sequence,k)

从指定序列中随机获取k个元素作为一个片段返回


本次主要针对函数进行了讲解,包括函数的定义调用、函数的参数、函数的返回值、函数的嵌套、递归函数、匿名函数、日期时间函数和随机数函数。函数作为关联功能的代码段,可以很好的提高应用的模块性,希望读者能用好这些函数。

【python学习】函数篇-初阶相关推荐

  1. python学习——函数式编程——高阶函数

    python学习--函数式编程--高阶函数 函数式编程(高阶函数):1:map && reduce; 2 : filter; 3: sorted; ------------------ ...

  2. python学习高级篇(part10)--类对象的特殊方法和特殊属性

    学习笔记,仅供参考,有错必纠 文章目录 python 学习高级篇 类对象的特殊方法之`__del__()` 类对象的特殊方法之`__getattr__()` 类对象的特殊方法之`__getitem__ ...

  3. python学习高级篇(part9)--对象的引用计数

    学习笔记,仅供参考,有错必纠 文章目录 python 学习高级篇 类对象的特殊方法之`__str__()` 类对象的特殊方法之`__new__()` 对象的引用计数 什么是引用计数 对象的引用计数加1 ...

  4. python学习高级篇(part7)--特殊属性和特殊方法

    学习笔记,仅供参考,有错必纠 文章目录 python 学习高级篇 特殊属性和特殊方法 获取对象的信息之特殊属性`__dict__` 获取对象的信息之反射 类对象的特殊方法`__len__()` pyt ...

  5. python学习高级篇(part8)--类对象的特殊方法

    学习笔记,仅供参考,有错必纠 文章目录 python 学习高级篇 类对象的特殊方法之`__iter__()`和`__next__()` 类对象的特殊方法之`__add__()`和`__radd__() ...

  6. Python学习第九篇:zipfile 库操作压缩包

    ​ Python学习第九篇:zipfile 库操作压缩包 -- 活动地址:CSDN21天学习挑战赛 zipfile是python里用来做zip格式编码的压缩和解压缩的 zipfile里有两个非常常用的 ...

  7. python学习总结1—高阶函数

    python 高阶函数学习 高阶函数 介绍python 高阶函数的使用方法 map/reduce函数 map函数 利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字. ...

  8. Python学习日志10 - 高阶函数和高级应用

    Python学习日志 RBHGO的主页欢迎关注 温馨提示:创作不易,如有转载,注明出处,感谢配合~ 目录 文章目录 Python学习日志 目录 前言 进入正题 Python学习日志10课 - 高阶函数 ...

  9. [Python学习]错误篇二:切换当前工作目录时出错——FileNotFoundError: [WinError 3] 系统找不到指定的路径...

    REFERENCE:<Head First Python> ID:我的第二篇[Python学习] BIRTHDAY:2019.7.13 EXPERIENCE_SHARING:解决切换当前工 ...

最新文章

  1. 我的日常学习笔记 18.05.08(Vue自定义事件)
  2. 互联网思维-产品思维(2)
  3. java中static、final、static final的区别
  4. python零基础怎么学-零基础python入门分析,如何做到一个月学会(深思极恐)
  5. ActiveState Komodo IDE v5.2.1.34168 最新版for Linux/Mac OS/Windows 全5大平台
  6. js 判断字符串中是否包含某个字符串
  7. PHP API接口签名验证
  8. ssm整合之四 分页
  9. 电源模块的安全设计和热设计
  10. linux可用机场客户端,Linux系统可用的6款Bittorrent客户端
  11. MySQL 快速创建千万级测试数据
  12. 【NodeJS 学习笔记02】入门资源很重要
  13. python怎么打出pi_随手写了段 Python,微信的地球居然转起来
  14. 绿幕抠图支持网页、PPT背景类型
  15. Ps学习(色彩范围工具使用和多边形抠图案例)
  16. 三险一金包括什么?三险和五险有什么区别?
  17. idea 网页项目无法显示图片
  18. 生活随记 - 被摩拜app忽悠了
  19. 高级着色语言HLSL入门
  20. Github 学习 (整理自http://stormzhang.com/github/2016/06/04/learn-github-from-zero4/ 张哥学Git)

热门文章

  1. Java Web书籍推荐
  2. Xamarin ListView Dynamic ItemTemplate
  3. 我的创作纪念日 - CSDN三周年
  4. 关于ActiveMQ消息队列不消费的思考
  5. GIS数据格式:Coverage
  6. azure kinect三维点云_Azure Kinect3动作捕捉三代深度机器学习AI图像识别光学动作捕捉系统...
  7. tgp饥荒服务器不稳定,TGP专用服务器搭建 出问题 求解
  8. 仙侣奇缘3新版登录器界面设定
  9. python开发windows桌面程序,python开发windows桌面应用
  10. 学习笔记 --- KF、EKF、IKF、ESIKF 公式推导 --Part 1