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)
  • 关键字可变参数
  1. **来定义
  2. 在函数体内 参数关键字是一个字典类型,key是一个字符串
  3. 可变参数指的是在调用函数的时候,传入的值(实参)的个数不固定
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-函数的参数与返回值的更多相关文章

  1. Python——变量的引用和函数的参数和返回值的传递方式

    变量的引用 在python中,所有的变量都是指向地址,变量本身不保存数据,而是保存数据在内存中的地址.我们用下面的程序来理解: a = 10 print(id(a)) a = 11 print(id( ...

  2. Python基础学习----参数和返回值

    # 函数的参数和返回值 # 4种组合方式 # 1.无参无返 # def methodone(): # 2.无参有返 def methodtwo(): a=10 return a # 3.有参无返 # ...

  3. c&c++函数的参数和返回值的传递终结版

    c++函数的参数和返回值的传递方式有三种:值传递.指针传递和引用传递. 在这之前先看几个例子: 一, int a=10; int b=a; b+=10; 此时b是a的一个拷贝,改变b的值,a并不会受到 ...

  4. javascript学习笔记(二):定义函数、调用函数、参数、返回值、局部和全局变量

    定义函数.调用函数.参数.返回值 关键字function定义函数,格式如下: function 函数名(){ 函数体 } 调用函数.参数.返回值的规则和c语言规则类似. <!DOCTYPE ht ...

  5. python笔记六(函数的参数、返回值)

    一 调用函数 在写函数之前,我们先尝试调用现有的函数 >>> abs(-9) 9 除此之外,还有我们之前使用的len()等.可以用于数据类型转换的 int() float() str ...

  6. python中函数的参数和返回值

    目录 函数 目标 01. 函数参数和返回值的作用 1.1 无参数,无返回值 1.2 无参数,有返回值 1.3 有参数,无返回值 1.4 有参数,有返回值 02. 函数的返回值 进阶 示例 -- 温度和 ...

  7. 探寻main函数的“标准”写法,以及获取main函数的参数、返回值

    main函数表示法        很多同学在初学C或者C++时,都见过各种各样的main函数表示法: main(){/*...*/} void main(){/*...*/} int main(){/ ...

  8. python 复习 4-1 函数、参数、返回值、递归

    函数 完成特定功能的一个语句组,这个语句组可以作为一个单位使用,并且给它组语句取一个名子,即函数名 可以通过函数名在程序不同地方多次执行,即函数调用 预定义函数(可以直接使用) 自定义函数(自编写的) ...

  9. 初识python 函数(定义,传参,返回值)

    python基础(二): 菜鸟教程基础知识讲解的非常全面,内容选择我认为的重点输出一遍 函数: 定义一个函数: 你可以定义一个由自己想要功能的函数,以下是简单的规则: def fun(arg): pa ...

  10. python函数入参和返回值

    以下内容参考自runoob网站,以总结python函数知识点,巩固基础知识,特此鸣谢! 原文地址:http://www.runoob.com/python3/python3-function.html ...

随机推荐

  1. 《网页设计基础——HTML注释与CSS注释》

    网页设计基础--HTML注释与CSS注释       一.HTML注释: 格式: <!-- 在此处书写注释 --> 例如: <html> <head> <ti ...

  2. 干货分享|使用 Istio 实现灰度发布

    Kubernetes 作为基础平台,提供了强大的容器编排能力.但是在其上部署业务和服务治理上,仍然会面对一些复杂性和局限性.在服务治理上,已经有许多成熟的 ServiceMesh 框架用于扩充其能力, ...

  3. Kubernetes 监控:Prometheus Adpater =》自定义指标扩缩容

    使用 Kubernetes 进行容器编排的主要优点之一是,它可以非常轻松地对我们的应用程序进行水平扩展.Pod 水平自动缩放(HPA)可以根据 CPU 和内存使用量来扩展应用,前面讲解的 HPA 章节 ...

  4. P7962 [NOIP2021] 方差 (DP)

    题目的意思就是可以交换差分数组,对答案进行化简:n∑ai2​−(∑ai​)2 ,再通过手玩分析可得最优解的差分数组一定是单谷(可以感性理解一下),因此我们将差分数组排序,依次加入,每次可以选择加在左边 ...

  5. List接口中的常用方法

    void add(int index, Object ele):在index位置插入ele元素boolean addAll(int index, Collection eles):从index位置开始 ...

  6. 发送HTTP请求方法- 留着自用

    /** * 发送HTTP请求方法,目前只支持CURL发送请求 * @param string $url 请求URL * @param array $data POST的数据,GET请求时该参数无效 * ...

  7. RE语法

    RE,英文为Regular Expression,中文译作正则表达式.用于文本过滤的工具.RE语法由一些元字符.其它任意字符串作为基本单元,匹配次数.分组匹配.锚定符等为操作单元组成.进行逐行扫描,满 ...

  8. 8.DRF请求响应和api_view

    一.请求对象(Request objects)   DRF引入了一个扩展Django常规HttpRequest对象的Request对象,并提供了更灵活的请求解析能力 Request对象的核心功能是re ...

  9. Mysql InnoDB Buffer Pool

    参考书籍<mysql是怎样运行的> 系列文章目录和关于我 一丶为什么需要Buffer Pool 对于InnoDB存储引擎的表来说,无论是用于存储用户数据的索引,还是各种系统数据,都是以页的 ...

  10. 有用的内置Node.js APIs

    前言 在构建你的第一个Node.js应用程序时,了解node开箱即用的实用工具和API是很有帮助的,可以帮助解决常见的用例和开发需求. 有用的Node.js APIs Process:检索有关环境变量 ...