05-Python函数
函数定义与调用
函数由以下几个部分组成:
- 函数名
- 函数参数
- 函数体
- 返回值
定义一个函数:
def showMyName(name): #定义函数
print(name)
showMyName("张三") #调用函数
解释:
- 使用def定义一个函数
- showMyName为函数名
- name为形参,"张三"为实参
- 函数头以冒号 : 结尾
- 使用缩进区分函数体
- 上例函数没有返回值。
返回值
什么是返回值?
如:
a=int(4.5)
解释:
- int(4.5)就是一个函数,返回值为4
- 所以a得到的值为4
应用:
def sum(a,b):
return a+b
print( sum(1,2) ) #输出3
解释:
- 通过return来返回结果
- 默认返回None(省略return则返回None)
返回多个值
def func1():
return 1,2,3,4 #将返回一个元组
返回一个函数
- 函数名是一个变量,保存着函数的地址,所以函数可以进行赋值操作
- 所以函数可以作为返回值
def func1():
print("hello")
def func2():
return func1 #返回一个函数
func2()() #输出hello
函数参数
形参与实参
函数参数分为形参和实参
形参是一个变量,而形参是一个值
比如:
def sum(a,b):
return a+b
print( sum(1,2) ) #输出3
解释:
- a和b是变量
- 1和2是值
- 1和2按照顺序赋值给了a和b(称为传参)
函数作为参数
- 函数名是一个变量,保存着函数的地址,所以函数可以进行赋值操作
- 所以函数可以作为实参传给实参
def func1(func):
func()
def func2():
print("hello")
func1(func2) #输出:hello
可变对象与不可变对象
传入可变对象:
def func1(a):
a[0]=100 #原列表将被改变
list1=[1,2,3]
func1(list1) #调用函数
print(list1) #输出[100, 2, 3]
传入不可变对象:
def func1(a):
a=100 #实参不会被改变
b=1
func1(b) #调用函数
print(b) #输出1
解释:
- 可以看到,形参能够改变可变对象中的值,但是不能改变不可变对象的值
- 原因是:可变对象传入的是地址,形参与实参指向的是同一块内存空间,并且可以直接操作这一块内存空间。
- 可变对象:字典、列表等类型
- 不可变对象:数字、字符串、元组等类型
必需参数
- 必需参数须以正确的顺序传入函数。调用时的数量也必须和声明时的一样
def func1(str):
print("hello")
func1() #无参数,则报错!!!
关键字参数
- 传入参数时,使用形参名与实参一一对应,这时传入参数的顺序可以不一致。
def func1(a,b,c):
print(a,b,c)
func1(b=2,a=1,c=3) #输出:1 2 3
比如:
f=open("test.txt","r",encoding="UTF-8") #encoding="UTF-8"就使用了关键字参数
默认参数
调用函数时,如果没有传递参数,则会使用默认参数
def func1(name,age=18):
print(name,age)
func1("张三") #使用默认值,输出:张三 18
func1("张三",20) #覆盖默认值,输出:张三 20
注意:
- 拥有默认值的参数必须写在后面
- 下面的例子会报错:
def func1(age=18,name): #默认参数写在了前面,报错!!!
print(name,age)
不定长参数
加了星号 * 的参数会以元组(tuple)的形式导入
def func1(a,*b):
print(b)
func1(11,22,33) #输出:(22, 33)
加了两个星号 ** 的参数会以字典的形式导入
def func1(a,**b):
print(b)
func1(11,b1=22,b2=33) #输出:{'b1': 22, 'b2': 33}
不定长参数需要写在形参的最后
如:
def function(name,sex='male',*args,**kwargs): #关键参数、默认参数、*args和**kwargs为不定长参数
print("Hello World!")
function("郭飞","男","a","b","c",爱好="拯救宇宙") #函数调用
各参数的值:
name "郭飞"
sex "男"
args ('a', 'b', 'c')
kwargs {'爱好': '拯救宇宙'}
递归函数
函数内部直接或间接调用函数本身,则该函数称为递归函数。
递归函数的特点:
- 直接或间接调用函数本身。
- 有结束逻辑。(即停止调用的逻辑)
一定要有结束的逻辑,不然就会无限循环调用自己。
示例-计算阶乘n!
def Leo(n):
sum = 1
if 1 == n: #递归终止条件(结束逻辑)
return 1;
sum = n * Leo(n - 1)
return sum #返回阶乘的总和
num=input("请输入一个数字:")
num=int(num)
print( Leo(num) ) #输出该数的阶乘
解释:
在求X的阶乘时,可以利用递归的思想:把大问题转化成小问题,再把小问题转化成更小的问题,最后得解。
Python内置函数
help(time) #打印关于模块time的帮助(需要导入模块)
exit() #退出程序
exit("程序已退出") #退出时输出提示
exit(1) #退出码为1(退出码为0的时候是正常)
isinstance([1,2],list) #判断数据是否为list
type(name) #查看变量的类型
type(a) is list #a为列表则返回True
range(100) #0到99
range(1,100) #1到99
range(1,100,2) #1到99里的奇数(2为步长)
id(a) #查看变量a的地址
chr(65) #将整数转为ASC-II
ord('a') #将一个字符转换为它的整数值 (结果为97)
hex(15) #将一个整数转换为一个十六进制字符串 (结果为0xf)
oct(10) #将一个整数转换为一个八进制字符串 (结果为0o12)
abs(3+4j) #求绝对值 (结果为5.0)
装饰器
- 装饰器用于给函数添加新的功能,比如Debug
- 装饰器不必修改原函数,就可以给原函数添加新的功能
原函数:
def now():
print("2018-01-01") #只输出这一行
now()
原函数结果:
2018-01-01
使用装饰器:
#装饰器
def log(func):
def wrapper(*args, **kw):
print('call %s():' % func.__name__ ) # 输出函数名
return func(*args, **kw)
return wrapper
#加装饰器后
@log #相当于now=log(now)
def now():
print('2018-01-01')
#调用函数
now()
使用装饰器的结果:
call now():
2018-01-01
解释:
- 可以看到在原函数上加了@log之后,就添加了函数log的功能。
- 不需要此功能时,删除@log即可。
- 装饰器是使用函数嵌套实现的,至于具体逻辑,麻烦自己看看吧~ 文字实在表达不清楚(图也懒^^),看不懂的直接找我吧~
05-Python函数的更多相关文章
- Python函数05/内置函数/闭包
Python函数05/内置函数/闭包 目录 Python函数05/内置函数/闭包 内容大纲 1.内置函数(二) 2.匿名函数及内置函数(重要) 3.闭包 4.今日总结 5.今日练习 内容大纲 1.内置 ...
- 05: python中的函数
1.1 python 函数 1.函数作用 定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 特性: 减少重复代码 使程序变的可扩展 使程序变得 ...
- Python函数讲解
Python函数
- Python函数参数默认值的陷阱和原理深究"
本文将介绍使用mutable对象作为Python函数参数默认值潜在的危害,以及其实现原理和设计目的 本博客已经迁移至: http://cenalulu.github.io/ 本篇博文已经迁移,阅读全文 ...
- day-05 python函数
# #-*- coding:utf-8 -*-# 1:编写一个名为 make_shirt()的函数,它接受一个尺码以及要印到 T 恤上的字样.这个函数应打印一个句子,概要地说明 T 恤的尺码和字样.d ...
- Python函数04/生成器/推导式/内置函数
Python函数04/生成器/推导式/内置函数 目录 Python函数04/生成器/推导式/内置函数 内容大纲 1.生成器 2.推导式 3.内置函数(一) 4.今日总结 5.今日练习 内容大纲 1.生 ...
- (python函数03)zip()函数
(python函数03)zip()函数 zip是用来压缩的,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个元组(tuple),然后返回有这些tuples组成的对象,可强制转化为列表和 ...
- Python函数用法和底层分析
目录 Python函数用法和底层分析 函数的基本概念 Python 函数的分类 核心要点 形参和实参 文档字符串(函数的注释) 返回值 函数也是对象,内存底层分析 变量的作用域(全局变量和局部变量) ...
- python 函数之day3
一 函数的语法及特性 什么是函数? 定义:函数是一个功能通过一组语句的集合,由名字(函数名)将其封装起来的代码块,要想执行这个函数,只要调用其函数名即可. 特性: 减少重复代码 使程序变的可扩展 使程 ...
- Python函数作用域的查找顺序
函数作用域的LEGB顺序 1.什么是LEGB? L:local 函数内部作用域 E:enclosing 函数内部与内嵌函数之间 G:global 全局作用域 B:build-in 内置作用域 2.它们 ...
随机推荐
- dotnet 6 命令行 cmd 设置输出英文解决中文乱码
我遇到在部署 CI 服务器,执行 cmd 命令构建,输出的中文是乱码.我期望让 dotnet 命令行输出使用英文解决乱码问题.通过设置 dotnet 命令行的语言文化,即可解决此问题 给 dotnet ...
- k8s应用---持久化存储和StorageClass(10)
一.简介: 在 k8s 中为什么要做持久化存储? 在 k8s 中部署的应用都是以 pod 容器的形式运行的,假如我们部署 MySQL.Redis 等数据库,需要 对这些数据库产生的数据做备份.因为 P ...
- SonarQube+Maven+SonarQube Scanner
1.SonarQube简介 官方网站地址:https://www.sonarqube.org/ SonrQube是一个开源的代码质量管理系统,用于检测代码中的错误,漏洞和代码规范.它可以以现有的Git ...
- CF1905E One-X
考虑在 \(n\) 个节点的树中,树根作为 \(lca\) 对答案的贡献,显然就是在左子树的叶子中选出一个非空集的方案乘上右子树的方案. \[w(n, id) = id \cdot (2 ^ {L\_ ...
- Solution Set - SAM
讲解一些 SAM 经典的应用.可以结合 字 符 串 全 家 桶 中 SAM 的部分食用. 洛谷P2408 求不同子串个数.在 SAM 中,所有结点是一个等价类,包含的字符串互不相同.结点 \(u\) ...
- JOISC2018 题解
\(\text{By DaiRuiChen007}\) Contest Link A. Construction of Highway Problem Link 题目大意 给 \(n\) 个点,初始每 ...
- 基于FPGA的贪吃蛇游戏 之代码解析
基于FPGA的贪吃蛇游戏 之代码解析 1. 代码结构 代码结构包含7格.v文件. 下面依次解析. 2. 代码解析 (1) seg_display.v 数码管的译码模块是最熟悉,最简单的模块了.这里是共 ...
- C 语言编程 — 编程实践
目录 文章目录 目录 前文列表 程序示例 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> <C 语言编程 - 基本数据类型> < ...
- 🐬记一次MySQL执行修改语句超时问题
异常问题 原因分析 这个问题发生在开发环境,怀疑是提交事务时终止项目运行,没有提交该事务,造成死锁 调试该事务时时间太长,为什么说有这个原因呢,因为通过查找日志显示 The client was di ...
- 上位机开发福利!快速掌握.NET中的Modbus通信
安装nuget包 Wesky.Net.OpenTools 1.0.8或以上版本.支持.net framework 4.6以上版本,以及所有.net core以及以上版本引用. 开发一个简单的Winf ...