Python基础 day4

函数

一、函 数的基本语法及特性

首先,我们要明确,函数的出现,目的就是为了解决重复代码的问题。

接下来,举个栗子来说明:

老板让你写一个监控程序,用来监控服务器的系统状况,当CPU,内存 ,磁盘等指标超出阈值的时候发邮件报警。

恩,就这么一个需求,当时拿到手的时候特别高兴,觉得我草,终于可以写代码了,于是你写了下面的代码:

while True

if  cpu利用率 > 90%:

#发送邮件

连接邮件服务器

发送邮件

关闭连接

if   disk > 90%:

#发送邮件

连接邮件服务器

发送邮件

关闭连接

if   mem >80%:

#发送邮件

连接邮件服务器

发送邮件

关闭连接

完毕,你很激动,觉得这是此生写的最多的Python代码,不禁暗暗窃喜,想到你把代码提交给老大以后,老大惊讶的表情,你很享受,于是,第二天,早早的,你提交了代码,老大姓王,住你家隔壁,人送外号老王。

老王看了看你的代码,说道,你这个重复代码太多,每次报警都要重新写一段发邮件的代码,太low了,这样干 存在2个问题:

1、代码重复过多,一个劲的copy 和paste不符合高端程序员的气质。

2、不利用二次使用。

老王接着说,其实很简单,只需要把重复的代码提出来,放到一个公共的地方,起个名字,以后谁想用这段代码,就可以通过这个名字直接调用即可,如下:

def   发送邮件(内容)

           #发送邮件提醒

            连接邮箱服务器

            发送邮件

             关闭连接

while  True:

          if cpu  >90%:

              发送邮件(‘CPU报警’)

          if  disk  > 90%:

                发送邮件(‘硬盘报警’)

           if   mem >80%:

                 发送邮件(‘内存报警’)

你还别说,这么一些确实省去了不少的重复代码,而且还增加了可读性。

说了这么多,那么函数到底是什么呢?

函数一词来源于数学,但编程中的函数概念,与数学中的函数是有很大的不同的,编程中的函数在英文中也有很多不同的叫法。在BASIC中叫做subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java中叫做method。

特性:

1、减少重复代码

2、使程序变得可扩展

3、使程序变得易维护

语法定义:

def    hanshuming():#函数名

         print(“hehe”)

sayhi() #调用函数

可以带参数:

#举个栗子,把下面代码改成函数

a,b = 5,8
c = a**b
print(c)

#改成函数

def calc(x,y):
    res = x**y
    return res   # 返回函数执行的结果

c = calc(a,b)  #结果赋值给c变量
print(c)

二、参数与局部变量内置

形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。

实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。

#改成用函数

def calc(x,y):  #形参
    res = x**y
    return res

c = calc(a,b)  #实参
print(c)

举个栗子

def sayhi(name,age,nationality="CN"):
    print("Hello,I am %s" % name,age,nationality )

sayhi("jixuege",22,"JP")
打印结果

Hello,I am jixuege 22 JP

说明:

上面不传国籍就使用默认的,传了就使用传的参数。

非固定参数

如果函数在定义时不确定用户想传入多少个参数,就可以用非固定参数

*args

举个栗子

def stu(name,age,*args):
    print(name,age,args)

stu("jixuege",22)

stu("jixuege",22,"dajiba","python")
输出结果

jixuege 22 ()
jixuege 22 (‘dajiba‘, ‘python‘)

还有一个**args

def stu(name,age,*args,**kwargs):
    print(name,age,args,kwargs)

stu("jixuege",22)
stu("jixuege",22,"python","CN",sex="man",province="xinjiang")
输出结果

jixuege 22 () {}
jixuege 22 (‘python‘, ‘CN‘) {‘province‘: ‘xinjiang‘, ‘sex‘: ‘man‘}

全局与局部变量的区别

在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。

全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。

当全局变量与局部变量同名时:

在定义局部变量的子程序内,局部变量起作用;在其他地方全局变量起作用。

三、返回值及嵌套函数

想要获取函数的执行结果,就可以用return语句把结果返回

注意:

1、函数在执行过程中只要遇到return语句,就会停止执行并返回结果,所以也可以理解为return语句代表着函数的结束。

2、如果未在函数中指定return,那这个函数的返回值为none。

四、递归

什么叫做递归函数?

如果一个函数在内部调用自己本身,这个函数就是递归函数。

递归特性:

1、必须有一个明确的结束条件。

2、每次进入更深一层递归时,问题规模相比上次递归都应有所减少。

3、递归效率不高,递归层次过多会导致栈溢出。

举个栗子

def calc(n):
    print(n)
    if int(n/2) == 0:
        return n
    return calc(int(n/2))

calc(10)

输出结果
10
5
2
1

五、匿名函数

什么是匿名函数?

匿名函数就是不需要显示的指定函数。

举个列子:

#这段代码
def calc(n):
    return n**n
print(calc(10))

#换成匿名函数
calc= lambda n:n**n
print(calc(10))
输出结果

10000000000
10000000000

六、函数式编程介绍

函数式Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。

记住:

函数式编程:讲的是数学里面的函数,跟我上面讲的函数不是一回事。

七、高阶函数

变量可以指向函数,函数的参数能够接受变量,那么一个函数就可以接受另一个函数作为参数,这种函数就叫高阶函数

举个栗子

def add(x,y,z):
    return z(x) + z(y)

res = add(3,-6,abs)
print(res)

打印结果
9

八、内置函数

时间: 2025-01-05 19:58:38

Python基础 day4的相关文章

Python基础day-4[dict,set,bool]

布尔类型: True和False 所有的数据类型自带布尔值,只有0,None,空的布尔值为False 字典dict: 特性:dict中使用key和对应的value来存储数据,dict不像 list那样,数据越多查询越慢.dict中key必须是不可变类型,或者说必须是可hash类型.value的值是可以改变的,可以是任意类型的数据.字典的取值是无序的.无法通过索引取值. 定义dict: d = {key:value,key:value,key:value} d = {'name':'abc','a

Day4 - Python基础4 迭代器、装饰器、软件开发规范

Python之路,Day4 - Python基础4 (new版) 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需求,看列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],我要求你把列表里的每个值加1,你怎么实现?你可能会想到2种方式 >>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>

Python 基础 - Day 4 Learning Note - Generator 生成器

列表生成器/列表解析 list comprehension 简单灵活地创建列表,通常和lambda(), map(), filter() 一起使用 通过列表生成式, 直接创建列表.但是,收到内容限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问几个元素,那其他的就白占空间.列表生成器能够一边循环一边计算,大大节省大量的空间.是生成器的一种. 只有调用,才能生成. 不支持切片操作,只能通过__next()___一个个取数字. 基本语法

python 基础(一)

一.Python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承. 1.1.Python应用领域: l 云计算: 云计算最火的语言, 典型应用OpenStack l WEB开发: 众多优秀的WEB框架,众多大型网站均为Python开发,Youtube, Dropbox, 豆瓣..., 典型WEB框架有Django l 科学运算.人工智能: 典型库N

linux+jmeter+python基础+抓包拦截

LINUX 一 配置jdk 环境 *需要获取root权限,或者切换为root用户 1.windows下载好,去 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 官方网站下载jdk(linux相应版本) 2.在usr目录下创建java路径文件夹 [root bin]cd /usr mkdir java 3.将jdk-8u60-linux-x64.tar.gz放到刚才创建的文件夹下

Python基础教程(第九章 魔法方法、属性和迭代器)

本文内容全部出自<Python基础教程>第二版,在此分享自己的学习之路. ______欢迎转载:http://www.cnblogs.com/Marlowes/p/5437223.html______ Created on Marlowes 在Python中,有的名称会在前面和后面都加上两个下划线,这种写法很特别.前面几章中已经出现过一些这样的名称(如__future__),这种拼写表示名字有特殊含义,所以绝不要在自己的程序中使用这样的名字.在Python中,由这些名字组成的集合所包含的方法称

Python基础入门 (一)

一.关于版本的选择 Should i use Python 2 or Python 3 for my development activity?转载自Python官网 Short version: Python 2.x is legacy, Python 3.x is the present and future of the language Python 3.0 was released in 2008. The final 2.x version 2.7 release came out

python基础教程(第二版)

开始学习python,根据Python基础教程,把里面相关的基础章节写成对应的.py文件 下面是github上的链接 python基础第1章基础 python基础第2章序列和元组 python基础第3章使用字符串 python基础第4章字典 python基础第5章循环 python基础第6章函数和魔法参数 python基础第7章类 python基础第8章异常 python基础第9章魔法方法.属性和迭代器 python基础第11章文件 python基础第12章GUI(wxPython) pytho

python基础周作业

python基础周作业 1.执行python脚本的两种方法 脚本前面直接指定解释器 在脚本开始前声明解释器 2.简述位,字节的关系 每一个字节占用八个比特位 3, 简述ascii.unicode.utf- ‐8.gbk的关系 utf--‐8 <-- unicode <-- gbk <-- ascii 按此方向兼容 4..请写出"李杰"分别用utf- ‐8和gbk编码所占的位数 "李杰" 占用utf -8 占6字节 , gbk 占用4字节 5.pyt