函数的定义主要有如下要点:


  • def:表示函数的关键字
  • 函数名:函数的名称,日后根据函数名调用函数
  • 函数体:函数中进行一系列的逻辑计算,如:发送邮件、计算出 [11,22,38,888,2]中的最大数等...
  • 参数:为函数体提供数据
  • 返回值:当函数执行完毕后,可以给调用者返回数据。

以上要点中,比较重要有参数和返回值:

 

3.def  函数

写函数的时候,要尽量以功能为导向,结果最好不要直接在函数中打印

简单的函数
def my_len(l):#函数名的定义
count=0
for i in l:
count+=1
return count #函数的返回值
print(my_len([1,2,2,22,4]))#函数的调用和返回值的接受

返回值:

函数是一个功能块,该功能到底执行成功与否,需要通过返回值来告知调用者

#没有返回值:

  不写return  或和他等价的 return None

  只写一个 return  == return None

  return的作用,:1.返回一个值,2.终止一个循环

返回一个值:可以返回任意数据类型,返回什么  就接受什么

返回多个值:用一个变量接收返回值,接收到的是一个元祖

      返回值有多个变量接收,那么返回值的数量和接受变量的个数完全一致。

返回值要注意的点:

li=[1,2,34,]
def func(*args):
print(args)
return args*2
print(func(li)) 得到的结果:
([1, 2, 34],) 可以看到参数传到函数内部是以元祖然后把参数单独当作元祖的一个值 以元祖形式存在的
值存在的
([1, 2, 34], [1, 2, 34]) 对函数进行*2的操作返回的是一个元祖 含有一个两个传入的数据

打散操作

li=[1,2,34,]
def func(*args):
print(args)
return args*2
a=func(*li) 这里是打散操作,将一个列表打散数据一一放到函数中去 l2=[5,5,6]
b,c,d,e,f,g=func(*l2)
将函数打散放到里边
#可以看到在函数内部每个数据都是以单独一个元素形式存在在元祖中的
(1, 2, 34)
#返回的值也是作为单独一个元素放到元祖中的
  print(a)   得到的值是 (1, 2, 34, 1, 2, 34)
  
  print(b)  得到的值是   5
 返回值的接收 
一个变量接收多个返回值就会将数据整体放到元祖中去(1, 2, 34, 1, 2, 34)
 多个变量接收多个返回值   则以 数据的形式接收

打散在关键字参数中的应用

d1={'name':'alex','age':18}
def func(**kwargs,):
print(kwargs)
func(**d1) #可以看到传字典形式的关键字参数的时候需在前边加上 ** 字典打散操作
# **打散操作 不然会被当作位置参数来接受 #打印的结果是
#{'name': 'alex', 'age': 18}
#或者这样传位置参数
func(name='aaa')

参数

函数的有三中不同的参数:

  • 普通参数
  • 默认参数
  • 动态参数

普通参数:

普通参数的传递并没有个数和数据类型的限制,可以传递字符串,数字,列表和字典。也不限定个数,需要注意的是:函数需要多少参数,调用的时候就要按照它定义时的顺序和数据类型传递过去。

形参:函数中的参数
实参:传递参数/传参,实际参数/实参 l=[1,2,2,22,4]
def my_len(l):  #参数:接收参数,形参,形式参数。
count=0
for i in l:
count+=1
return count
l=[1,2,2,22,4]#参数:传递参数/传参,实际参数/实参 l=[1,2,2,22,4]
print(my_len(l))
l2='金老板 is somebody'
print(my_len(l2))

传参可以是任意的数据类型,并且传递什么接受什么

站在传递参数的角度上看问题:一共有有两种传递参数。

        第一种:按照位置穿参数(

        第二种:按照关键字穿参数

def f1(arg1,arg2):#站在接受,形参的角度上:位置参数
print(arg1)
print(arg2)
f1('你好啊',arg2=[1,2,3,4,5])
f1(arg2='你好啊',[1,2,3,4,5])#这样会报错无法执行
f1(arg2='你好啊',arg1=[1,2,3,4,5])#这样才能正常执行
#按照关键字传参数和按照位置传参数是可以混用的
#但是首先传按位置(就是参数的索引号,前后顺序号)的,再传按关键字(arg1= arg2=)
#按照位置传完该接受的参数只能接收一个值,不接受或者重复接受都不行

默认参数

默认参数是给参数加上一个默认的值,但我们调用函数的时候,如果传递了这个参数,那么使用我们传递过来的值;如果不传则使用默认的值,默认参数可以有多个,但是必须放在所有参数的最后。当我们有多个默认参数的时候,调用函数的时候可以使用参数名指定其中的某一个参数,以保证参数能准确的传递给被调用的函数。

#默认参数
def classmate(name,sex='男'): #默认参数是可以不传的参数,

print("姓名%s,性别%s"%(name,sex)) #在不传参数的情况下可以使用默认的值
classmate('yakun') #如果传了,就会使用传的值
classmate('守业')
classmate('飞龙')
classmate('晓梅','女')

姓名yakun,性别男
姓名守业,性别男
姓名飞龙,性别男
姓名晓梅,性别女

默认参数尽量避免可变数据类型

def func2(args,list=[]):
list.append(args)
return list
aa=func2('aa')
bb=func2('bb',[])
cc=func2('cc')
print(aa)
print(bb)
print(cc)

以下是打印的情况

['aa', 'cc']
['bb']
['aa', 'cc']

可以看到默认参数的初始值设置成了一个列表,这时候当不单传的话默认就是以当前的list去接受数据,

所以  aa  cc 的数据都是传到默认列表的内存空间里去了,所以  aa  cc 得到的值都是  [ 'aa', ' cc' ]

函数的返回值

本章小结

面向过程编程的问题:代码冗余、可读性差、可扩展性差(不易修改)

定义函数的规则:

1.定义:def 关键词开头,空格之后接函数名称和圆括号()。
2.参数:圆括号用来接收参数。若传入多个参数,参数之间用逗号分割。
    参数可以定义多个,也可以不定义。
    参数有很多种,如果涉及到多种参数的定义,应始终遵循位置参数、*args、默认参数、**kwargs顺序定义。
    如上述定义过程中某参数类型缺省,其他参数依旧遵循上述排序
3.注释:函数的第一行语句应该添加注释。
4.函数体:函数内容以冒号起始,并且缩进。
5.返回值:return [表达式] 结束函数。不带表达式的return相当于返回 None def 函数名(参数1,参数2,*args,默认参数,**kwargs):
"""注释:函数功能和参数说明"""
函数体
……
return 返回值

调用函数的规则:

1.函数名()
函数名后面+圆括号就是函数的调用。
2.参数:
圆括号用来接收参数。
若传入多个参数:
应按先位置传值,再按关键字传值
具体的传入顺序应按照函数定义的参数情况而定
3.返回值
如果函数有返回值,还应该定义“变量”接收返回值
如果返回值有多个,也可以用多个变量来接收,变量数应和返回值数目一致 无返回值的情况:
函数名() 有返回值的情况:
变量 = 函数名() 多个变量接收多返回值:
变量1,变量2,... = 函数名()

day11 python学习 函数的建立,返回值,参数的更多相关文章

  1. Python3基础 Python的函数都有返回值 无指定返回值的函数 返回NONE对象

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...

  2. 9 - Python函数定义-位置参数-返回值

    目录 1 函数介绍 1.1 为什么要使用函数 1.2 Python中的函数 2 函数的基本使用 3 函数的参数 3.1 参数的默认值 3.2 可变参数 3.2.1 可变位置传参 3.2.2 可变关键字 ...

  3. Python函数变量和返回值

    Python函数的全局变量和局部变量 1.不同的编程语言,程序可以分为函数和过程两大类,函数具有具体返回值,而过程则不具有具体的返回值,python只具有函数,因为对于它的一般函数,其返回值为所具体返 ...

  4. python开发初识函数:函数定义,返回值,参数

    一,函数的定义 1,函数mylen叫做函数名 #函数名 #必须由字母下划线数字组成,不能是关键字,不能是数字开头 #函数名还是要有一定的意义能够简单说明函数的功能 2,def是关键字 (define) ...

  5. python函数2(返回值、传递列表...)

    python函数2(返回值.传递列表...) 1.返回值 1.1.返回简单的值 #返回简单值 def get_formatted_name(first_name,last_name): "& ...

  6. day11 python之函数装饰器

    一,什么是装饰器? 装饰器本质上就是一个python函数,他可以让其他函数在不需要做任何代码变动的前提下,增加额外的功能,装饰器的返回值也是一个函数对象. 装饰器的应用场景:比如插入日志,性能测试,事 ...

  7. python执行系统命令后获取返回值的几种方式集合

    python执行系统命令后获取返回值的几种方式集合 今天小编就为大家分享一篇python执行系统命令后获取返回值的几种方式集合,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 第一种情 ...

  8. 二、python学习-函数

    类型判断 1.type()直接获取类型 2.isinstance 用法一:isinstance(值,类型) 返回真或假 用法二:isinstance(值,(类型1,类型2 ...)) 有一个类型满足 ...

  9. 【C语言入门教程】5.1 函数说明 与 返回值

    C 语言是结构化语言,它的主要结构成分是函数.函数被作为一种构件,用以完成程序中的某个具体功能.函数允许一个程序的各个任务被分别定义和编码,使程序模块化.本章介绍 C 语言函数的设计,如何用函数分解程 ...

随机推荐

  1. BOM对象思维导图

  2. 『cs231n』无监督学习

    经典无监督学习 聚类 K均值 PCA主成分分析 等 深度学习下的无监督学习 自编码器 传统的基于特征学习的自编码器 变种的生成式自编码器 Gen网络(对抗式生成网络) 传统自编码器 原理 类似于一个自 ...

  3. Linux 下载最新kubectl版本的命令:

    ubuntu centos下通用 第一步.下载最新版本的命令: curl -LO https://storage.googleapis.com/kubernetes-release/release/$ ...

  4. UVA-10710 Skyscraper Floors (找规律+幂取模)

    题目大意:题目中给了一种数的定义,根据定义,让判断一个给定的数是不是这种数.题中叫这种数为吉米数,定义如下:对序列1,2,3,,,,n,做n-1次SF变换(对该变换的解释在下文),如果能得到原序列,则 ...

  5. JVM笔记(二) 垃圾收集器(1)

    垃圾收集器 主要通过阅读<深入了解Java虚拟机>(周志明 著)和网络资源汇集而成,为本人学习JVM的笔记.同时,本文理论基于JDK 1.7版本,暂不考虑 1.8和1.9 的新特性,但可能 ...

  6. POJ 1753 bfs+位运算

    T_T ++运算符和+1不一样.(i+1)%4 忘带小括号了.bfs函数是bool 型,忘记返回false时的情况了.噢....debug快哭了...... DESCRIPTION:求最少的步骤.使得 ...

  7. CF 459A && 459B && 459C && 459D && 459E

    http://codeforces.com/contest/459 A题 Pashmak and Garden 化简化简水题,都告诉平行坐标轴了,数据还出了对角线,后面两个点坐标给的范围也不错 #in ...

  8. bzoj1008

    题解: 要求有几种方案可以越狱,可以用总方案-不会越狱的方案 那么总方案就是m^n 那么考虑不会越狱的方案 显然第一个人有m中,后面都是m-1中(和前一个不一样) 答案就是m^n-m*(m-1)^(n ...

  9. 【转载】oracle之rowid详解

    原文URL:http://www.2cto.com/database/201109/104961.html 本文讨论的是关于oracle从8i开始引进object的概念后的rowid,即扩展(exte ...

  10. 理解 LSTM 网络

    递归神经网络 人类并不是每时每刻都从头开始思考.正如你阅读这篇文章的时候,你是在理解前面词语的基础上来理解每个词.你不会丢弃所有已知的信息而从头开始思考.你的思想具有持续性. 传统的神经网络不能做到这 ...