三、python函数详解
函数的定义:
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.
定义规则:
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
- 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
# 定义函数
def func( str ):
"打印任何传入的字符串"
print(str)
return
# 调用函数
func("我要调用用户自定义函数!")
func("再次调用同一函数")
参数
1)必选参数(位置参数),即函数调用时必须要传的参数
def func(a,b):
c = a + b
return c
print(func(12,10))
2)默认参数(关键字参数)
def func(a,b=100):
c = a + b
return c
print(func(12))
print(func(12,24))
3)不定长参数(可变参数)
# *args表示任何多个无名参数,在函数内部参数args接收的是一个tuple;
def func(*args):
result= list(args)
return result
a = func(1,2,3)
print(a)
def func(*args):
sum = 0
for n in args:
sum = sum + n*n
return sum
a = func(1,2,5,3)
print(a)
# **kwargs表示关键字参数,它是一个dict。并且同时使用*args和**kwargs时,必须*args参数列要在**kwargs前
def func(**kwargs):
for key in kwargs:
print ("{}:{}" .format(key,kwargs[key]) )
func(myarg1="two", myarg2=3)
函数的返回值
解释:程序中函数完成一件事情后将结果返回给调用者。
带返回值的函数
想要在函数中把结果返回给调用者,需要在函数中使用return
def func(a,b):
c = a+b
return c
result = func(2,4)
print(result)
一个返回值可以返回多个数据
# 返回多个值的时候默认返回一个元祖,但是可以自己修改
def func(a,b):
c = a // b #商
d = a % b #余
return c,d
result = func(45,2)
print(result)
def func(a,b):
c = a // b
d = a % b
return [c,d]
result = func(45,2)
print(result)
全局变量和局部变量
局部变量
- 定义:在函数内部定义的变量
- 作用范围:只在函数内部起作用,在函数外部不能使用,因为齐作用范围只是在自己函数内部,所以不同的函数何以定义相同名字的局部变量,
- 作用:为了临时保存数据
- 当函数被调用时,局部变量我创建,当函数调用完成后这个变量就不能被使用了。
def fun():
score = 100
return score
print(fun())
#修改局部变量
def fun():
score = 100
print("修改前变量的值为{}".format(score))
score = 888
result = "修改后变量的值为{}".format(score)
return result
print(fun())
全局变量
- 定义:即能被一个函数使用,也能被其他函数所使用
var = 100
def fun(num):
return var + num
print(fun(400))
def fun1():
return var
print(fun1())
在函数中修改全局变量
var = 99 # 定义全局变量
def func():
global var
print('修改前全局变量的值为{}'.format(var))
var = 88
return '修改后全局变量的值为{}'.format(var)
def func1():
return "此刻全局变量的值为{}".format(var)
print(func())
print(func1())
装饰器:
在不改变函数的前提下为函数新增加新的功能
import time
def timer(func):
def warper(*args,**kwargs):
start = time.time()
func(*args,**kwargs)
end = time.time()
return end-start
return warper
@timer
def function(a):
time.sleep(2)
return [x for x in range(a)]
print(function(10000))
递归函数
- 理解:传递回归
在函数内部可以调用其他的函数,如果一个函数在内部调用了自己本身,这个函数就是递归函数:
递归的特点:
- 必须有一个明确的临界条件,要不就会变成死循环了,最终撑爆系统
- 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
- 递归执行效率不高,递归层次过多会导致栈溢出
# n!=1×2×3×...×n。阶乘亦可以递归方式定义:0!=1,n!=n * (n-1)!。
def func(n):
if n == 1: #如果n等于1表示已经递归到最后,返回1,这个就是临界条件。
return 1
else:
return n * func(n -1) #当没有到达临界条件时,用n乘以对n-1的递归,每次都把n乘进去,但是后面依然使用当下的这个递归函数,会再次调用计算n-1,直到递归结束,也就是将从n到1的数全部递归完。
print(func(4))
# 快速排序算法
def quick_sort(list1):
if len(list1) <= 1:
return list1
else:
mid_num = list1[0]
big_nums = [i for i in list1[1:] if i >=mid_num]
small_nums = [i for i in list1[1:] if i < mid_num]
result = quick_sort(big_nums) + [mid_num] + quick_sort(small_nums)
return result
a = [2,4,2,4,6,7,5,19]
print(quick_sort(a))
#结果:[19, 7, 6, 5, 4, 4, 2, 2]
匿名函数
关键字lambda表示匿名函数,冒号前面的n表示函数参数,可以有多个参数。
匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。
有些函数在代码中只用一次,而且函数体比较简单,使用匿名函数可以减少代码量,看起来比较"优雅“
calc = lamdba n : n**n
print(calc(10))
# calc 为函数名
# lamdba 为定义匿名函数关键字,和def类似
# n 为参数
# n**n 为返回值
l = [{'name':'电脑','price':1999},{'name':'电脑','price':2000}]
print(sorted(l,key=lambda dic:dic['price'])) #按价格排序
# 参数说明:
# iterable -- 可迭代对象。
# key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
# reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)
三、python函数详解的更多相关文章
- Python第三周 函数详解
def 函数名(): """注释说明"""" 执行逻辑体 return 返回值 定义不带参数的函数 带参数的函数 默认参数 这个是 ...
- 动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)
动态载入 DLL 动态载入方式是指在编译之前并不知道将会调用哪些 DLL 函数, 完全是在运行过程中根据需要决定应调用哪些函数. 方法是:用 LoadLibrary 函数加载动态链接库到内存,用 Ge ...
- 【转载】动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)
原文地址:https://www.cnblogs.com/westsoft/p/5936092.html 动态载入 DLL 动态载入方式是指在编译之前并不知道将会调用哪些 DLL 函数, 完全是在运行 ...
- win系统动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)
动态载入 DLL 动态载入方式是指在编译之前并不知道将会调用哪些 DLL 函数, 完全是在运行过程中根据需要决定应调用哪些函数. 方法是:用 LoadLibrary 函数加载动态链接库到内存,用 Ge ...
- 2、Python函数详解(0601)
函数的基础概念 1.函数是python为了代码最大程度的重用和最小化代码冗余而提供的基本程序结构: 2.函数是一种设计工具,它能让程序员将复杂的系统分解为可管理的部件: 3.函数用于将相关功能打包并参 ...
- python函数详解
''' 函数:是一段可以重复调用的代码,通过输入的参数,返回对应的结果 名字绑定的机制,把实际参数的值与形式参数的值绑定到一起 1.函数调用的时候,实际参数的值的顺序与形式参数的顺序一一对应 2.当在 ...
- 3、Python函数详解(0601)
回顾: re search,findall,finditer.sub,subn function () 调用函数 def func_name(arg1,....) 生成函数对象 func_s ...
- 基于@AspectJ和schema的aop(三)---切点函数详解
切点函数是AspectJ表达式语言的核心, 也是使用@AspectJ进行切面定义的难点.本小节我们通过具体的实例对切点函数进行深入学习. 1.@annotation() @annotation()表示 ...
- Python基础-week03 集合 , 文件操作 和 函数详解
一.集合及其运算 1.集合的概念 集合是一个无序的,不重复的数据组合,它的主要作用如下 *去重,把一个列表变成集合,就自动去重了 *关系测试,测试两组数据之前的交集.并集.差集.子集.父级.对称差集, ...
随机推荐
- Right turn【模拟+标记】
Right turn 题目链接(点击) frog is trapped in a maze. The maze is infinitely large and divided into grids. ...
- 2019-02-13 思考:1000瓶药水,1瓶有毒,老鼠毒发24h,如何用最少的老鼠在24h内找出毒药?
题目: 现在有1000瓶药水,其中一瓶有毒,一只老鼠喝了在24h后会准时死亡,药水无色无味,如何用最少的老鼠在24h内找出毒药? 分析: 时间限制为24h,说明我们只有一次喂老鼠的机会,需要一波找出来 ...
- MySQL数据表中有自增长主键时如何插入数据
原文链接:https://blog.csdn.net/RuobaiMEN/article/details/79794199 MySQL数据库表中有自增主键ID,当用SQL插入语句中插入语句带有ID列值 ...
- Redis删除策略和逐出策略
本文知识点 过期数据概念 数据删除策略 逐出算法 过期数据 先来看三个key值,分别为sex.name.age. 这三个值设置的指令为 set name kaka setex age 100 24 s ...
- Java 多线程基础(八)线程让步
Java 多线程基础(八)线程让步 yield 一.yield 介绍 yield()的作用是让步.它能让当前线程由“运行状态”进入到“就绪状态”,从而让其它具有相同优先级的等待线程获取执行权:但是,并 ...
- WeChair——团队展示
这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 团队名称 WeChair 这个作业要求在哪里 团队作业第一次 这个作业的目标 团队合作,项目开发 作业正文 如下 其他参考文献 ...
- opencv C++矩阵操作
int main(){ cv::Mat src1=(cv::Mat_<float>(2,3)<<1,2,3,4,5,6); cv::Mat src2=(cv::Mat_< ...
- 9、ssh的集成方式2
1.在第一种的集成方式中,通过struts2-spring-plugin-2.1.8.1.jar这个插件让spring自动产生对应需要的action类,不需要在对应的spring.xml文件中进行配置 ...
- Python3-pymysql模块-数据库操作之MySQL
博客转载 http://www.cnblogs.com/alex3714/articles/5950372.html 代码示例 import pymysql conn = None cursor = ...
- 计算机网络之tcp/ip协议族
TCP/IP协议族是一个四层协议系统: 1. 数据链路层 1.1 作用 (1) 实现网卡接口的网络驱动,以处理数据在以太网线等物理媒介上的传输 (2) 网络驱动程序隐藏了不同物理网络的不同电气 ...