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


  • 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. Dubbo 环境搭建

    CentOS7 x64 JDK1.8 1. wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.8/zoo ...

  2. java.lang.Exception: Socket bind failed: [730048]

    严重: Error initializing endpoint java.lang.Exception: Socket bind failed: [730048] ?????????×???(Э?é/ ...

  3. 安装完DevExpress14.2.5,如何破解它呢?

    DevExpress是一个界面控件套件,提供了一系列的界面控件套件的DotNet界面控件.DevExpress开发的控件有很强的实力,不仅功能丰富,应用简单,而且界面华丽,更可方便订制,方便开发人员开 ...

  4. 大数据技术Hadoop面试题

    1. 下面哪个程序负责 HDFS 数据存储.答案C datanode a)NameNodeb)Jobtrackerc)Datanode d)secondaryNameNodee)tasktracker ...

  5. mysql 到postgresql

    1 import pandas as pd 2 import psycopg2 3 from io import StringIO 4 import pymysql 5 conf={"mys ...

  6. 多重继承,虚继承,MI继承中虚继承中构造函数的调用情况

    先来测试一些普通的多重继承.其实这个是显而易见的. 测试代码: //测试多重继承中派生类的构造函数的调用顺序何时调用 //Fedora20 gcc version=4.8.2 #include < ...

  7. Python 常用扩展库(八)

  8. 利用 gulp 来合并seajs 的项目

    gulp-seajs-transport 和 gulp-seajs-concat这两个gulp插件 gulp-seajs-transpor 这个插件这样是给每个js模块 标示 模块名称 gulp-se ...

  9. 玩转树莓派:OpenHAB的入门(二)

    通过第一篇的介绍,我们现在已经安装了OpenHAB和Demo House,那么接下来我们来看一下OpenHAB是如何工作的. OpenHAB如何工作? 接下来你会在openHAB配置的共享文件夹看到s ...

  10. 玩转树莓派:OpenHAB的入门(一)

    如果你对那些仅仅只是为了控制一盏灯而不得不下载一个特定的App的智能家居感到厌烦,这里有个好消息:OpenHAB可以为你实现最灵活的控制智能家居,OpenHAB是一个成熟的,开源的家庭自动化平台,既可 ...