Python函数

1. 函数定义

  函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。

2. 定义

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

3. 语法 

  1. def functionname( parameters ):
  2. '''函数_文档说明字符串'''
  3. function_body
  4. return [expression]

4. 函数调用

  定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。这个函数的基本结构完成以后,你可以通过另一个函数调用定义的函数名进行执行,也可以直接从Python提示符执行。

 5. 函数参数

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

  • 必备参数
  • 命名参数
  • 缺省参数
  • 不定长参数

必备参数:

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

  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3.  
  4. #可写函数说明
  5. def printme( str ):
  6. "打印任何传入的字符串"
  7. print str;
  8. return;
  9.  
  10. #调用printme函数
  11. printme();    
  12.  
  13. 此时调用没有提供必备参数,因此会出现如下报错
  1. Traceback (most recent call last):
  2. File "test.py", line 11, in <module>
  3. printme();
  4. TypeError: printme() takes exactly 1 argument (0 given)

命名参数

  命名参数和函数调用关系紧密,调用方用参数的命名确定传入的参数值。你可以跳过不传的参数或者乱序传参,因为Python解释器能够用参数名匹配参数值。

用命名参数调用printme()函数:

  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3.  
  4. #可写函数说明
  5. def printme( str ):
  6. "打印任何传入的字符串"
  7. print str;
  8. return;
  9.  
  10. #调用printme函数
  11. printme( str = "My string");
  1. 以上实例输出结果:
  1. My string

下例能将命名参数顺序不重要展示得更清楚:

  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3.  
  4. #可写函数说明
  5. def printinfo( name, age ):
  6. "打印任何传入的字符串"
  7. print "Name: ", name;
  8. print "Age ", age;
  9. return;
  10.  
  11. #调用printinfo函数
  12. printinfo( age=50, name="miki" );
  1. 以上实例输出结果:
  2. Name: miki
  3. Age 50

缺省参数

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

  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3.  
  4. #可写函数说明
  5. def printinfo( name, age = 35 ):
  6. "打印任何传入的字符串"
  7. print "Name: ", name;
  8. print "Age ", age;
  9. return;
  10.  
  11. #调用printinfo函数
  12. printinfo( age=50, name="miki" );
  13. printinfo( name="miki" );
  1. 以上实例输出结果:
  2. Name: miki
  3. Age 50
  4. Name: miki
  5. Age 35

不定长参数

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

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

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

  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3.  
  4. # 可写函数说明
  5. def printinfo( arg1, *vartuple ):
  6. "打印任何传入的参数"
  7. print "输出: "
  8. print arg1
  9. for var in vartuple:
  10. print var
  11. return;
  12.  
  13. # 调用printinfo 函数
  14. printinfo( 10 );
  15. printinfo( 70, 60, 50 );
  1. 以上实例输出结果:
  2. 输出:
  3. 10
  4. 输出:
  5. 70
  6. 60
  7. 50

6.匿名函数

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

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

语法

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

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

举例

  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3.  
  4. # 可写函数说明
  5. sum = lambda arg1, arg2: arg1 + arg2;
  6.  
  7. # 调用sum函数
  8. print "相加后的值为 : ", sum( 10, 20 )
  9. print "相加后的值为 : ", sum( 20, 20 )
  1. 以上实例输出结果:
  2. 相加后的值为 : 30
  3. 相加后的值为 : 40

Python基础篇【第2篇】: Python自定义函数的更多相关文章

  1. Python基础知识总结笔记(四)函数

    Python基础知识总结笔记(四)函数python中的函数函数中的参数变量作用域偏函数PFA递归函数高阶函数BIFs中的高阶函数匿名函数lambda闭包Closure装饰器Decorator函数式编程 ...

  2. Python基础之【第一篇】

    Python简介: python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语 ...

  3. Python 基础【第八篇】变量

    1.变量定义: 给数据进行命名,数据的名字就叫做变量 2.变量格式: [变量名] = [值] 注:变量名命名需要满足下面两条准则 准则一:标示符开头不能为数字.不能包含空格.特殊字符准则二:标示符不能 ...

  4. python基础【第四篇】

    python第二节 1.while循环 Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务.基本形式为: while 条件: 循环体 ...

  5. MySQL基础篇(03):系统和自定义函数总结,触发器使用详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.系统封装函数 MySQL 有很多内置的函数,可以快速解决开发中的一些业务需求,大概包括流程控制函数,数值型函数.字符串型函数.日期时间函数 ...

  6. python基础(14)-反射&类的内置函数

    反射 几个反射相关的函数可参考python基础(10)-匿名函数&内置函数中2.2.4反射相关 类的一些内置函数 __str__()&__repr__() 重写__str__()函数类 ...

  7. Python基础【day01】:python介绍发展史(一)

    本节内容 Python介绍 发展史 Python 2 or 3? 一. Python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏 ...

  8. python第十四课--排序及自定义函数之自定义函数(案例二)

    案例二: python中定义有/无返回值的函数,演示python没有函数重载这一说 需求:自定义函数:计算两个整数的和值两个原则:1).有没形参有,两个 2).有没返回值可有可无 def my_sum ...

  9. python第十四课--排序及自定义函数

    1.排序 特点: 1).升序:从小到大 2).降序:从大到小 课堂实现选择排序:参看老郭选择排序.py文件 2.函数:(方法/method) 自定义函数: 概念:它表示一段作用范围(作用域),当中封装 ...

  10. 『Python基础』第2节: Python简介及入门

    一. Python介绍 Python是一门高级计算机程序设计语言,1989年,荷兰的Guido von Rossum创造了它.Guido是是一个牛人,1982年,他从阿姆斯特丹大学获得了数学和计算机硕 ...

随机推荐

  1. UIImageWriteToSavedPhotosAlbum

    UIImageWriteToSavedPhotosAlbum: Next UIKit Function Reference Overview The UIKit framework defines a ...

  2. nginx https使用

    默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译时指定–with-http_ssl_module参数,安装模块依赖于OpenSSL库和一些引用文件,通常这些文件并不在同一个软件包中.通常这 ...

  3. Yii2 主从 数据库

    配置方法 参考资料:http://www.linuxidc.com/Linux/2015-07/120134.htm 读写分离(Read/Write Splitting). 1.原理:让主数据库(ma ...

  4. Node.js 事件

    Node.js 事件 Node.js 所有的异步I/O 操作在完成时都会发送一个事件到事件队列. Node.js里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时分发一个事件, ...

  5. ASP.NET使用Razor语法无法正确识别.cshtml文件

    ASP.NET使用WebPage编程的好处之一是可以使用强大的Razor语法, 但初次使用Razor语法会碰到一个比较头疼的问题就是无法直接写一个.cshtml让浏览器去识别,查资料也没有找到相关问题 ...

  6. 用python定时文章发布wordpress

    用python定时文章发布wordpress: 流程: 采集 - 筛选文章 - wordpress文章发布. wordpress文章发布代码:python利用模块xmlrpclib发布文章非常便捷,省 ...

  7. 网站优化之Asp.Net篇<一>

    一>禁用viewstate. 二>禁用动态编译.访问一个Aspx文件时 会编译为一个新的类放在C盘Asp.net临时文件夹下.下次请求不会再编译,会把先前的编译结果返回. 任何对Asp.n ...

  8. 视频转gif

    如何把视频变成GIF https://shop16541393.koudaitong.com/v2/feature/1x6q09fa?openid=ov0dfwb6-DBFqTzvekSNAjT59U ...

  9. Qt线程(2) QThread中使用WorkObject

    一般继承QThread的WorkThread都会在重载的run()中创建临时的WorkObject,这样能确定这个WorkObject在该thread中使用 那如果这个WorkObject是个Sing ...

  10. mysql 可能会用到的一些 函数

    DATE_SUB(sysdate(), INTERVAL 8 HOUR)  //当前时间前 8小时 ifnull("","")  Parameter //添加一 ...