python-函数的参数与返回值
Python函数
4.1、函数初识
- 在编写程序的过程中,有某一功能代码块出现多次,但是为了提高编写的效率以及代码的重用,所以把具有独立功能的代码块组织为一个小模块,这就是函数
- 就是一系列Python语句的组合,可以在程序中运行一次或者多次,
- 一般具有独立的功能
- 代码的复用最大化以及最小化冗余代码,整体代码结构清晰,问题局部化
- 语法结构
def 函数名(参数1,参数2,参数3):
"""文档说明"""
函数体
return 值
- 函数定义
def pritInfo():
'''
这个函数用来打印小张信息
'''
#函数代码块
print('小张的身高是%f'%1.73)
print('小张的体重是%f'%130)
print('小张的爱好是%s'%'周杰伦')
print('小张的专业是%s'%'信息安全')
定义函数发生的事情:
1. 申请内存空间保存函数体代码
2. 将上述代码地址绑定给函数名
3. 定义函数不会执行函数体代码,但是会检测函数体语法
- 函数 调用
print(pritInfo())#打印的是内存地址
pritInfo()
调用函数发生的事情:
1. 通过函数名找到函数的内存地址
2. 然后加括号就是在触发函数体代码的执行
def foo():
bar()
print('from foo')
def bar():
print('from bar')
foo()
"""执行过程"""
函数的使用分两个 阶段,
第一个阶段:定义
第二个阶段:调用
定义的时候只检测语法,不执行代码
在定义foo时咩有语法错误
然后再去定义bar,
最后再去调用foo()时,bar早就丢到内存中了,所以就不会报错,
def foo():
bar()
print('from foo')
foo()
def bar():
print('from bar')
"""会报错"""
- 进一步去输出不同人的信息, 通过传入参数来解决
def pritInfo(name,height,weight,hobby,pro):
#函数代码块
print('%s的身高是%f'%(name,height))
print('%s的体重是%f'%(name,weight))
print('%s的爱好是%s'%(name,hobby))
print('%s的专业是%s'%(name,pro))
- 调用带参数的信息
pritInfo('peter',175,130,'听音乐','甜品师')
pritInfo('小李',189,140,'打游戏','软件工程师')
4.2、函数参数
- 参数分类:
必选参数,默认参数【缺省参数】,可选参数,关键字参数
- 参数:其实就是函数为了实现某项特定功能,进而为了得到实现功能所需要的数据
def sum(a,b):#形式参数:只是意义上的一种参数,在定义的时候是不占内存地址的
sum=a+b
print(sum)
- 必选参数 (位置参数)
函数调用的时候,必选参数是必须要赋值的
sum(20,15)#20,15就是实际参数 实参, 实实在在的参数,是实际占用内存地址的
sum()不能这样写,需要传参
位置实参:在函数嗲用阶段,按照从左往右的顺序依次传入值
位置实参必须放在关键字实参前,否则报语法错误
在调用阶段,实参(变量值)会绑定给形参(变量名)
实参与形参的绑定关系:在函数调用时生效,调用结束后解除绑定关系
- 默认参数【缺省参数】(默认形参)
在定义函数阶段,就已经被赋值的形参,称之为默认形参
特点:在定义阶段就已经被赋值,意味着在调用阶段可以不用为其赋值
位置形参必须在默认形参的左边
def sum(a=1,b=11):
print(a+b)
sum()#在调用的时候,如果未赋值,就用定义函数时给定的默认值
sum(10)#10赋给了a,b还是11,结果为21
- 关键字参数
关键字实参:在函数调用阶段,按照key=value的形式传入值
位置实参必须放在关键字实参前,否则报语法错误
指名道姓的给某个形参传值,
def a(a,b):
res=a+b
return res
print(a(b=2,a=1))
- 可变参数(当参数的个数不确定时,比较灵活)
*形参名
:用来接受溢出的位置实参,溢出的位置实参会被*
保存成元组形式
def getComputer(a,b*args):
'''
计算累加和
'''
# print(args)
result=0
for item in args:
result+=item
print(result)
getComputer(1,2,3,4)
"""结果如下"""
1 2 (3,4)
- *可用在实参中,实参中带
*
,把*
后的值打散成位置实参
def func(x,u,z):
print(x,u,z)
func(*[11,22,33])#相当于func(11,22,33)
def func2(x,y,*args):
print(x,y,args)
func2(*'hello')
"""结果如下"""
11 22 33
h e ('l','l','o')
- 形参实参都带*
def func(x,y,*args):#args=(3,4,5,6)
print(x,y,args)
func(1,2*[3,4,5,6])#相当于func(1,2,3,4,5,6)
"""结果如下"""
1 2 (3,4,5,6)
- 关键字可变参数
- **来定义
- 在函数体内 参数关键字是一个字典类型,key是一个字符串
- 可变参数指的是在调用函数的时候,传入的值(实参)的个数不固定
def Func(a,b**kwargs):
print(a,b,kwargs)
Func(1,b=2,x=3,b=5)
def Infofunc(*args,**kwargs): #可选参数必须在关键字可选参数之前
print(args)
print(kwargs)
Infofunc(1,2)
# Infofunc(12,13,46,age=18)
- **可用在实参中,实参中带
**
,把**
后的值打散成关键字实参
def func(x,y,c):
print(x,y,c)
#func(*{'x':1,'y':2,'c':3})#func('x','y','c')
func(**{'x':1,'y':2,'c':3})#func(x=1,y=2,c=3)
"""结果如下"""
1 2 3
- 形参与实参都带**
def func(x,y,**kwargs):
print(x,y,kwargs)
func(**{'y':111,'x':211,'z':456,'d':789})#打散后相当于func(y=222,x=211,z=456,d=789)
"""结果如下"""
211 111 {'z':456,'d':789}
- 混用*与**:
*args
必须在**kwargs
前面
def fun(*args,**kwargs):
print(args)
print(kwargs)
fun(1,2,3,4,5,6,8,x=1,y=2,z=3)
"""结果如下"""
(1,2,3,4,5,6,8)
{'x':1,'y':2,'z':3}
- 命名关键字参数(了解)
def func(x,y,*,a,b):#a和b为命名关键字参数
print(x,y)
print(a,b)
案例实现
- 接收N 个数字,求这些参数数字的和
def num(*args):
'''
#写函数,接收N 个数字,求这些参数数字的和
'''
result=0
for i in args:
result+=i
return result
a=num(1,2,2,2,2)
print(a)
- 找出传入的列表或元组的奇数位对应的元素,并返回一个新的列表
def Func1(con):
'''
找出传入的列表或元组的奇数位对应的元素,并返回一个新的列表
'''
listA=[]
index=1
for i in con:
if index%2==1:#判断奇数位
listA.append(i)
index+=1
return listA
# e=Func1([1,2,45,1,1,'as',{1,25,',hs'}])
e=Func1(list(range(1,11)))
print(e)
- 检查传入字典的每一个value的长度,如果大于2,那么仅仅保留前两个长度的内容,并将新的内容返回给调用者,PS:字典中的数据只能是字符串或者是列表
def Func2(dic):
'''
检查传入字典的每一个value的长度,如果大于2,那么仅仅保留前两个长度的内容,
并将新的内容返回给调用者,PS:字典中的数据只能是字符串或者是列表
'''
result={}
for key,value in dic.items():
if len(value)>2:
result[key]=value[:2]#向字典添加新的数据
else:
result[key]=value
return result
#调用
dicObj={'name':'张三','hobby':['唱歌','跳舞','编程'],'major':'信息安全'}
print(Func2(dicObj))
4.3、函数返回值
- 概念:函数执行完以后会返回一个对象,如果在函数的内部有return,就可以返回实际的值,否则返回None
- 类型:可以返回任意 类型,返回值类型应该取决于return 后面的类型
- 用途:给调用方返回数据
- 在一个函数体内可以出现多个return ,但是肯定只有一个return
- 如果在一个函数体内,执行了return,意味着就执行完成推出了,return后面的代码将不会执行
#返回值
def Sum(a,b):
sum=a+b
return sum #将计算结果返回
result=Sum(12,15)#将返回的值赋给其他变量
print(result)
def calComputer(num):
'''
累加和
'''
listA=[]
result=0
i=1
while i<=num:
result+=i
i+=1
# listA.append(result)
listA.append(result)
return listA
message=calComputer(10)
print(type(message))
print(message)
def returnType():
'''
返回元组类型数据
'''
return 1,2,3
a =returnType()
print(type(a))
print(a)
def returnType1():
'''
返回字典类型
'''
return {"name":"成龙"}
b=returnType1()
print(type(b))
print(b)
python-函数的参数与返回值的更多相关文章
- Python——变量的引用和函数的参数和返回值的传递方式
变量的引用 在python中,所有的变量都是指向地址,变量本身不保存数据,而是保存数据在内存中的地址.我们用下面的程序来理解: a = 10 print(id(a)) a = 11 print(id( ...
- Python基础学习----参数和返回值
# 函数的参数和返回值 # 4种组合方式 # 1.无参无返 # def methodone(): # 2.无参有返 def methodtwo(): a=10 return a # 3.有参无返 # ...
- c&c++函数的参数和返回值的传递终结版
c++函数的参数和返回值的传递方式有三种:值传递.指针传递和引用传递. 在这之前先看几个例子: 一, int a=10; int b=a; b+=10; 此时b是a的一个拷贝,改变b的值,a并不会受到 ...
- javascript学习笔记(二):定义函数、调用函数、参数、返回值、局部和全局变量
定义函数.调用函数.参数.返回值 关键字function定义函数,格式如下: function 函数名(){ 函数体 } 调用函数.参数.返回值的规则和c语言规则类似. <!DOCTYPE ht ...
- python笔记六(函数的参数、返回值)
一 调用函数 在写函数之前,我们先尝试调用现有的函数 >>> abs(-9) 9 除此之外,还有我们之前使用的len()等.可以用于数据类型转换的 int() float() str ...
- python中函数的参数和返回值
目录 函数 目标 01. 函数参数和返回值的作用 1.1 无参数,无返回值 1.2 无参数,有返回值 1.3 有参数,无返回值 1.4 有参数,有返回值 02. 函数的返回值 进阶 示例 -- 温度和 ...
- 探寻main函数的“标准”写法,以及获取main函数的参数、返回值
main函数表示法 很多同学在初学C或者C++时,都见过各种各样的main函数表示法: main(){/*...*/} void main(){/*...*/} int main(){/ ...
- python 复习 4-1 函数、参数、返回值、递归
函数 完成特定功能的一个语句组,这个语句组可以作为一个单位使用,并且给它组语句取一个名子,即函数名 可以通过函数名在程序不同地方多次执行,即函数调用 预定义函数(可以直接使用) 自定义函数(自编写的) ...
- 初识python 函数(定义,传参,返回值)
python基础(二): 菜鸟教程基础知识讲解的非常全面,内容选择我认为的重点输出一遍 函数: 定义一个函数: 你可以定义一个由自己想要功能的函数,以下是简单的规则: def fun(arg): pa ...
- python函数入参和返回值
以下内容参考自runoob网站,以总结python函数知识点,巩固基础知识,特此鸣谢! 原文地址:http://www.runoob.com/python3/python3-function.html ...
随机推荐
- MySQL常用函数整理,建议收藏!
常见函数 字符串函数 数字函数 日期函数 聚合函数 流程控制函数 一.字符串函数 concat(s1,s2...,sn) --将s1,s2...,sn连接成字符串,如果该函数中的任何参数为 null, ...
- 第一个HTML
第一个HTML <!DOCTYPE html><!--html 文件开始--><html lang="en"><!--head 文件头-- ...
- Kubernetes实践技巧:升级为集群
高可用 前面我们课程中的集群是单 master 的集群,对于生产环境风险太大了,非常有必要做一个高可用的集群,这里的高可用主要是针对控制面板来说的,比如 kube-apiserver.etcd.kub ...
- Kubernetes的kubectl常用命令速记
文章转载自:https://mp.weixin.qq.com/s/0kqQzeA-MzCOhPMkmiR4_A kubectl是用来管理Kubernetes集群的命令行工具. kubectl默认在&q ...
- 基于MySQL的-u选项实现如何最大程度防止人为误操作MySQL数据库
在mysql命令加上选项-U后,当发出没有WHERE或LIMIT关键字的UPDATE或DELETE时,MySQL程序就会拒绝执行.那么,我们基于MySQL提供的这项设置,就可以轻松实现如何最大程度防止 ...
- 1_Linux
一. Linux介绍 1.1 引言 在学习Linux之前, 大家先了解开发环境,生产,测试环境 开发环境: 平时大家大多是在Windows或者Mac操作系统下去编写代码进行开发,在开发环境中安装大量的 ...
- DevExpress弹框、右键菜单、Grid的使用
很重要!!!Dev为了区分winform的命名,会把一些新添加的属性放在Properties对象里!!找不到想要的属性,记得到里面找找哦! 一.下拉框 在这里假设我们的数据源是db.List(),在这 ...
- 【前端必会】不知道webpack插件? webpack插件源码分析BannerPlugin
背景 不知道webpack插件是怎么回事,除了官方的文档外,还有一个很直观的方式,就是看源码. 看源码是一个挖宝的行动,也是一次冒险,我们可以找一些代码量不是很大的源码 比如webpack插件,我们就 ...
- day08-MySQL事务
MySQL事务 先来看一个例子 有一张balance表: 需求:将tom的100块钱转到King账户中 执行的操作是: update balance set money = money -100 wh ...
- CentOS 7.9 安装 kafka_2.13
一.CentOS 7.9 安装 kafka_2.13 地址 https://kafka.apache.org/downloads.html 二.安装准备 1 安装JDK 在安装kafka之前必须先安装 ...