目录

  • Python 函数
  • 函数调用
  • 匿名函数
  • return语句
  • 变量作用域

Python 函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。


定义一个函数

你可以定义一个由自己想要功能的函数,以下是简单的规则:

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()
  • 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以冒号起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

语法

def functionname( parameters ): "函数_文档字符串" function_suite return [expression]

默认情况下,参数值和参数名称是按函数声明中定义的的顺序匹配起来的。

实例

以下为一个简单的Python函数,它将一个字符串作为传入参数,再打印到标准显示设备上。

def printme( str ): "打印传入的字符串到标准显示设备上" print str return

函数调用

定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。

这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行。

如下实例调用了printme()函数:

# 定义函数
def printme( str ):"打印任何传入的字符串"print(str);return;# 调用函数
printme("我要调用用户自定义函数!");
printme("再次调用同一函数");

以上实例输出结果:

我要调用用户自定义函数!
再次调用同一函数

按值传递参数和按引用传递参数

所有参数(自变量)在Python里都是按引用传递。如果你在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了。例如:

# 可写函数说明
def changeme( mylist ):"修改传入的列表"mylist.append([1,2,3,4]);print("函数内取值: ", mylist)return# 调用changeme函数
mylist = [10,20,30];
changeme( mylist );
print("函数外取值: ", mylist)

传入函数的和在末尾添加新内容的对象用的是同一个引用。故输出结果如下:

函数内取值:  [10, 20, 30, [1, 2, 3, 4]] 函数外取值: [10, 20, 30, [1, 2, 3, 4]]

参数

以下是调用函数时可使用的正式参数类型:

  • 必备参数
  • 关键字参数
  • 默认参数
  • 不定长参数

必备参数

必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。

调用printme()函数,你必须传入一个参数,不然会出现语法错误:

 #可写函数说明
def printme( str ):"打印任何传入的字符串"print(str)return;#调用printme函数
printme();

以上实例输出结果:

Traceback (most recent call last): File "test.py", line 11, in <module> printme(); TypeError: printme() takes exactly 1 argument (0 given)

关键字参数

关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。

使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

以下实例在函数 printme() 调用时使用参数名:

 #可写函数说明
def printme( str ):"打印任何传入的字符串"print(str);return;#调用printme函数
printme( str = "My string");

以上实例输出结果:

My string

下例能将关键字参数顺序不重要展示得更清楚:

#可写函数说明
def printinfo( name, age ):"打印任何传入的字符串"print("Name: ", name)print("Age ", age)return;#调用printinfo函数
printinfo( age=50, name="miki" );

以上实例输出结果:

Name:  miki
Age  50

缺省参数

调用函数时,缺省参数的值如果没有传入,则被认为是默认值。下例会打印默认的age,如果age没有被传入:

#可写函数说明
def printinfo( name, age = 35 ):"打印任何传入的字符串"print("Name: ", name)print("Age ", age)return;#调用printinfo函数
printinfo( age=50, name="miki" );
printinfo( name="miki" );

以上实例输出结果:

Name:  miki
Age  50 Name: miki Age 35

不定长参数

你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名。基本语法如下:

def functionname([formal_args,] *var_args_tuple ): "函数_文档字符串" function_suite return [expression]

加了星号(*)的变量名会存放所有未命名的变量参数。选择不多传参数也可。如下实例:

# 可写函数说明
def printinfo( arg1, *vartuple ):"打印任何传入的参数"print("输出: ")print(arg1)for var in vartuple:print varreturn;# 调用printinfo 函数
printinfo( 10 );
printinfo( 70, 60, 50 );

以上实例输出结果:

输出:
10
输出: 70 60 50

匿名函数

python 使用 lambda 来创建匿名函数。

  • lambda只是一个表达式,函数体比def简单很多。
  • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
  • lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
  • 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

语法

lambda函数的语法只包含一个语句,如下:

lambda [arg1 [,arg2,.....argn]]:expression

如下实例:

# 可写函数说明
sum = lambda arg1, arg2: arg1 + arg2;# 调用sum函数
print "相加后的值为 : ", sum( 10, 20 )
print "相加后的值为 : ", sum( 20, 20 )

以上实例输出结果:

相加后的值为 :  30 相加后的值为 : 40

return语句

return语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。之前的例子都没有示范如何返回数值,下例便告诉你怎么做:

# 可写函数说明
def sum( arg1, arg2 ):# 返回2个参数的和."total = arg1 + arg2print("函数内 : ", total)return total;# 调用sum函数
total = sum( 10, 20 );
print "函数外 : ", total 

以上实例输出结果:

函数内 :  30 函数外 : 30

变量作用域

一个程序的所有的变量并不是在哪个位置都可以访问的。访问权限决定于这个变量是在哪里赋值的。

变量的作用域决定了在哪一部分程序你可以访问哪个特定的变量名称。两种最基本的变量作用域如下:

  • 全局变量
  • 局部变量

全局变量和局部变量

定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。

局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。如下实例:

total = 0; # 这是一个全局变量
# 可写函数说明
def sum( arg1, arg2 ):#返回2个参数的和."total = arg1 + arg2; # total在这里是局部变量.print("函数内是局部变量 : ", total)return total;#调用sum函数
sum( 10, 20 );
print("函数外是全局变量 : ", total )

以上实例输出结果:

函数内是局部变量 :  30 函数外是全局变量 : 0

转载于:https://www.cnblogs.com/peng-lan/p/5413311.html

Python学习(13)函数相关推荐

  1. Python学习之函数返回多个值

    Python学习之函数返回多个值 问题的引出 Python中,一个函数能不能一次返回多个值? 在C语言中,函数最多返回一个值,如果要返回多个值,可以把这些值封装在一个结构体中.注意,C语言不允许函数返 ...

  2. python判断特殊字符的函数,python学习--quote()函数,,屏蔽特殊的字符、比如

    python学习--quote()函数,,屏蔽特殊的字符.比如 屏蔽特殊的字符.比如如果url里面的空格!url里面是不允许出现空格的. 在 Python2.x 中的用法是: urllib.quote ...

  3. python学习 字符串函数

    python学习 字符串函数 字符串不能被改变,以下和函数,只是 原字符串初始化后不能改变,函数只是将改变后的值返回赋给新的变量(当然可以赋给原来的变量) 大小写函数 capitalize()函数 大 ...

  4. python学习(函数)

    前言:目前先将python的基础语法和知识学完,再去尝试写脚本,这次就学习python中的函数和类. 一.定义函数 使用关键字def 来定义一个函数,这就是函数定义,而且定义以冒号结尾. 格式: de ...

  5. python学习之函数

    最近跟着廖雪峰老师的python教程在学习,总结一下学习成果 函数定义: 当没有return语句时,返回的结果为None def 函数名 ():函数体return 返回值 函数调用: 我们可以调用py ...

  6. Python学习8 函数 匿名函数 内置函数

    转换相关的方法-eval 转换相关的方法-json 函数基本语法大纲 函数概念 示例: 题目: 函数的参数 def f(x,y=1,*z,**abc):print(x,y,z,abc,sep=&quo ...

  7. python学习笔记---函数【廖雪峰】

    函数 调用函数 函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个"别名": >>> a = abs # 变量a指向ab ...

  8. Python学习笔记--函数

    python--函数 函数的定义--def 参数传递 可变参数 lambda匿名函数 全局变量的声明--global 函数的定义–def def 函数名(函数参数[0个或多个])函数体 return ...

  9. 【Python学习】函数

    函数无疑是程序设计中极其重要的一部分,它第一次提出了封装的概念,将一定的功能进行封装以便于使用,这无疑是需要让人非常理解的部分.虽然Python不像C++与Java一样以构造函数为主体的方式进行程序编 ...

  10. Python学习(13)--Lambda表达式和switch语句的实现

    1.Lambda表达式定义匿名函数    在Python中,Lambda表达式是用来快速定义一个最小函数,这个函数小到什么程度呢,小到只有一行代码,一条语句,在Python中有时候我们为了提高程序的可 ...

最新文章

  1. 老大批评我不要为了“分库分表”而“分库分表”
  2. python大数据结课报告_2020知到大数据分析的PYTHON基础结课答案
  3. 韩春雨,时隔六年再发高分论文
  4. 为什么dw预览不了php文件,dreamweaver为什么添加不了预览浏览器
  5. python读取文件with open_python 文件读写操作open和with的用法
  6. 赛后总结:第四届工业大数据竞赛注塑成型
  7. Go语言实现HashSet
  8. BZOJ2948 : [Poi2001]绿色游戏
  9. [Coding Style] CSS coding style
  10. linux日志搜索关键词_linux中的实用技巧和快捷键总结
  11. 高校校园网建设方案【含网络拓扑图+拓扑结构图+配置命令】(详细版)
  12. php服务器总是崩,服务器php对外发包引起崩溃的解决办法
  13. 单个html页面面包屑,充分利用网页设计中的面包屑
  14. 《最终幻想》《古墓丽影》发行商Square Enix开始涉足NFTs和区块链游戏
  15. 网页加入动态动漫人物
  16. 是否能够成为真正的编程高手,主要是在于是否有毅力坚持学习和练习。输出名言“贵有恒,何必三更起五更睡:最无益,只怕一日曝十日寒。”主要是想让读者激励自己,坚持学习C语言。
  17. 沟通的艺术——情绪:感觉、思考和沟通
  18. [洛谷]P1010 [NOIP1998 普及组] 幂次方
  19. c++/c/java 资源共享群
  20. js 将字符串转化为number的简单方式

热门文章

  1. DTH11驱动实例稳定修改补充
  2. 四周有阴影_四周窄边全功能TypeC 飞利浦256P1FR评测
  3. IC/FPGA笔试/面试题分析(八)近期IC/FPGA笔试面试讨论群题目汇总解析
  4. 【 FPGA 】组合逻辑中的竞争与险象问题(五)
  5. 【 C 】经典抽象数据类型(ADT)之内存分配
  6. OFDM专题之输入的复信号从何而来?
  7. Node安装node-sass总是下载超时问题解决
  8. SAP Query达到select * where 的效果 2011-04-29
  9. iOS开发使用Unwind Segue进行返回
  10. Win10如何查看我们的电池健康