函数是什么

Python中的函数与数学中的函数不同,它不再只是公式,而是实实在在有着自己特定功能的代码。其实在潜移默化中我们已经有所接触了。

比如print()函数,range()函数,type()函数等。

函数各式各样,或简单或复杂,但其本质却好是相通的:给函数一些数据,函数进行处理,输出你想要的东西。

函数名后面的括号里放参数,参数即要处理的数据。

函数的定义:函数是组织好的、可以重复使用的、用来实现单一功能的代码。

定义和调用函数

  • 定义函数:

语法如下:

def 函数名(参数1,参数2,...,参数n):
函数体
return 语句

第1行:

def的意思是定义(define),「函数名」需自己取,再是一个括号和冒号,括号里面的是参数,参数名也是自己取,最后是一个冒号。

第2行:

def下一行缩进的代码是函数要实现的功能,也叫「函数体」。

第3行:

return 语句。函数内部一旦遇到return语句,就会停止执行并返回结果。没有return语句的函数,Python也会在末尾隐性地加上return None,即返回None值(return None可以简写为return)。所以你会看到很多例子是省略return语句的。

注意事项:

  1. 函数名的选取要体现函数功能,一般用小写字母和单下划线、数字等组合;
  2. 根据函数功能,括号可能含有多个参数,也可不带参数,命名规则与函数名相同;
  3. 函数后面的冒号不能丢
  4. 函数体的缩进不能丢

定义函数是将函数的内部功能封装起来,等待被调用。

  • 调用函数:

在Python里,调用就是输入函数名和参数对应的值。

例子:

# 定义3个函数
def express():
print('我爱你') def express1(name):
print('我爱你'+ name) def express2(name,person):
print('我爱你'+name)
print('我爱你'+person) # 分别调用3个函数
express()
express1('中国')
express2('中国','中国人民')

调用函数最关键的是得清楚函数参数的个数,还有参数的赋值,即参数的传递。

为了便于理解函数的基本语法,举的例子很简单。其实大部分函数都很复杂,但我们只需明白函数能实现什么功能,懂的如何去给函数传递参数,会正确运用函数解决问题即可。

函数的重要概念

  • 参数类型

主要的参数类型有:位置参数默认参数不定长参数

举例说明:

假设你开了个饭馆,顾客可任意点菜。但因人手不足,所以只能为每个人提供一份开胃菜和一份主食。如果写成函数的形式,这个函数就会有两个参数。

def  menu(appetizer,course):

    print('开胃菜:'+ appetizer)
print('主食:'+ course) menu('果仁菠菜','兰州拉面')

这里的'果仁菠菜'和'兰州拉面'是对应参数appetizer和course的位置顺序传递的,所以被叫作「位置参数」 ,这也是最常见的参数类型。

如果用等号指定赋值,就可不用理会参数位置,如:

menu(course='牛肉拉面',appetizer='话梅花生')

接下来是「默认参数」,还用上述例子。

假如食堂为每位来客提供一道免费甜品冰淇淋,那么例子如下:

def  menu(appetizer,course,dessert='冰淇淋'):

    print('开胃菜:'+ appetizer)
print('主食:'+ course)
print('甜品:'+ dessert) menu('果仁菠菜','兰州拉面')

因为已经默认把'冰淇淋'传递给dessert,调用时无需再传递一遍。

如果一个参数的值是相对固定的,那么设置默认参数就免去了每次都要传递的麻烦。

但默认参数并不意味着不能改变,如下:

def  menu(appetizer,course,dessert='冰淇淋'):

    print('开胃菜:'+ appetizer)
print('主食:'+ course)
print('甜品:'+ dessert) menu('果仁菠菜','兰州拉面')
menu('果仁菠菜','兰州拉面','山楂羹')

前两个参数已有对应的值传递,Python会自动将'山楂羹'传递给参数dessert。

下面是「不定长参数」,即不确定传递参数的数量。继续上述例子。

饭店晚上开始卖烧烤,每个人点串的数量不等,举例如下:

def menu(*barbeque):
print(barbeque) menu('烤肉串','烤韭菜','烤鳕鱼')

输出结果为:('烤肉串', '烤韭菜', '烤鳕鱼'),这种数据类型叫做元组(tuple)。

元组的写法是 把数据放在小括号()中,它的用法和列表用法类似,主要区别在于列表中的元素可以随时修改,但元组中的元素不可更改。

我们也可以先生成一个元组,再传入参数。上述代码等价于:

order = ('烤肉串','烤韭菜','烤鳕鱼')

def menu(*barbeque):
print(barbeque) menu(*order)

和列表一样,元组是可迭代对象,这意味着我们可以用for循环来遍历它,这时候的代码就可以写成:

def  menu(appetizer,course,*barbeque,dessert='冰淇淋'):

    print('开胃菜:'+ appetizer)
print('主食:'+ course)
print('甜品:'+ dessert)
for i in barbeque:
print('烧烤:' + i) menu('果仁菠菜','兰州拉面','烤肉串','烤韭菜','烤鳕鱼')

注意:此时默认参数要放在不定长参数的后面,即dessert=’冰淇淋'要放在*barbeque后面,否则传递的值会对应不上。

还有如下情况,默认参数被指定赋值时,位置能够呼应即可:

def  menu(appetizer,course,dessert='冰淇淋',*barbeque):

    print('开胃菜:'+ appetizer)
print('主食:'+ course)
print('甜品:'+ dessert)
for i in barbeque:
print('烧烤:' + i) menu('果仁菠菜','兰州拉面','山楂羹','烤肉串','烤韭菜','烤鳕鱼')
  • return语句

前面我们提到,return是返回值,当你输入参数给函数,函数就会返回一个值给你。每个函数都会有返回值。

就像len(), type()函数一样,会返回一个值,然后,我们可以调用这个值,比如用print()函数打印出来。

但print()函数本身比较特殊,它在屏幕上显示完相关的文本内容就完活儿了,并不会返回一个值。所以,它返回的是空值(None)。

在自定义函数的时候,我们就可以用return语句规定该函数要返回什么值给我们。

带return语句的函数是这样的:

Python基础语法函数的更多相关文章

  1. python学习第五讲,python基础语法之函数语法,与Import导入模块.

    目录 python学习第五讲,python基础语法之函数语法,与Import导入模块. 一丶函数简介 1.函数语法定义 2.函数的调用 3.函数的文档注释 4.函数的参数 5.函数的形参跟实参 6.函 ...

  2. python之最强王者(2)——python基础语法

    背景介绍:由于本人一直做java开发,也是从txt开始写hello,world,使用javac命令编译,一直到使用myeclipse,其中的道理和辛酸都懂(请容许我擦干眼角的泪水),所以对于pytho ...

  3. Python 基础语法(三)

    Python 基础语法(三) --------------------------------------------接 Python 基础语法(二)------------------------- ...

  4. Python 基础语法(四)

    Python 基础语法(四) --------------------------------------------接 Python 基础语法(三)------------------------- ...

  5. Python 基础语法(二)

    Python 基础语法(二) --------------------------------------------接 Python 基础语法(一) ------------------------ ...

  6. Python 基础语法

    Python 基础语法 Python语言与Perl,C和Java等语言有许多相似之处.但是,也存在一些差异. 第一个Python程序 E:\Python>python Python 3.3.5 ...

  7. 吾八哥学Python(四):了解Python基础语法(下)

    咱们接着上篇的语法学习,继续了解学习Python基础语法. 数据类型大体上把Python中的数据类型分为如下几类:Number(数字),String(字符串).List(列表).Dictionary( ...

  8. python基础——匿名函数及递归函数

    python基础--匿名函数及递归函数 1 匿名函数语法 匿名函数lambda x: x * x实际上就是: def f(x): return x * x 关键字lambda表示匿名函数,冒号前面的x ...

  9. Python基础语法(三)

    Python基础语法(三) 1. 数值型数据结构 1.1 要点 在之前的博客也有提到,数值型数据结构在这里就不过多介绍了.在这里提及一些需要知道的知识点. int.float.complex.bool ...

随机推荐

  1. 浅谈Winform控件开发(一):使用GDI+美化基础窗口

    写在前面: 本系列随笔将作为我对于winform控件开发的心得总结,方便对一些读者在GDI+.winform等技术方面进行一个入门级的讲解,抛砖引玉. 别问为什么不用WPF,为什么不用QT.问就是懒, ...

  2. 各个复位标志解析,让我们对MCU的程序的健康更有把控

    作者:良知犹存 转载授权以及围观:欢迎添加微信公众号:Conscience_Remains 总述 曾经开发的时候遇到这样情况,我们开发的设备需要长时间工作上报信息,但是我们在后台查看上报数据,发现设备 ...

  3. 2019牛客暑期多校训练营(第一场)A - Equivalent Prefixes(单调栈)

    题意 给定两个$n$个元素的数组$a,b$,它们的前$p$个元素构成的数组是"等价"的,求$p$的最大值."等价"的意思是在其任意一个子区间内的最小值相同. $ ...

  4. Codeforces Round #672 (Div. 2) D. Rescue Nibel!(排序)

    题目链接:https://codeforces.com/contest/1420/problem/D 前言 之前写过这场比赛的题解,不过感觉这一题还可以再单独拿出来好好捋一下思路. 题意 给出 $n$ ...

  5. Codeforces Round #650 (Div. 3) C. Social Distance

    题目链接:https://codeforces.com/contest/1367/problem/C 题意 给出一个长为 $n$ 的 $01$字符串,两个相邻 $1$ 间距应大于 $k$,初始序列合法 ...

  6. 【hdu 1573】X问题(数论--拓展欧几里德 求解同余方程组的个数)

    题目:求在小于等于N的正整数中有多少个X满足:X mod a[0] = b[0], X mod a[1] = b[1], X mod a[2] = b[2], -, X mod a[i] = b[i] ...

  7. Codeforces Round #498 (Div. 3) E. Military Problem (DFS)

    题意:建一颗以\(1\)为根结点的树,询问\(q\)次,每次询问一个结点,问该结点的第\(k\)个子结点,如果不存在则输出\(-1\). 题解:该题数据范围较大,需要采用dfs预处理的方法,我们从结点 ...

  8. python之字符串方法upper/lower

    1.描述: upper():用于将字符串全部转换为大写字母 lower():用于将字符串全部转换为小写字母 2.语法 str.upper() str.lower() 3.返回值 upper()或low ...

  9. python 3.7 利用socket文件传输

    参考:https://www.cnblogs.com/VseYoung/p/socket_1.html 参考 https://blog.csdn.net/a19990412/article/detai ...

  10. python3基本数据类型补充

    列表 list 有序,可嵌套,可重复,元素可修改 方括号 占用空间小但时间消耗比较大 mylist=["kimi",1,1,1,["amy",18]] V=my ...