定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了。对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解。

Python的函数定义非常简单,但灵活度却非常大。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。

建立第一个函数

  1. /usr/bin/env Python
  2. #coding:utf-8
  3. def add_function(a,b):
  4. c = a+b
  5. print c
  6. if __name__=="__main__":
  7. add_function(2,3)

在定义函数的时候,参数可以像前面那样,等待被赋值,也可以定义的时候就赋给一个默认值。例如

  1. >>> def times(x,y=2): #y的默认值为 2
  2. ... print "x=",x
  3. ... print "y=",y
  4. ... return x*y
  5. ...
  6. >>> times(3) #x=3,y=2
  7. x= 3
  8. y= 2

全局变量和局部变量

  1. x = 2
    def funcx():
    global x #全局变量
    x = 9
    print "this x is in the funcx:-->",x
  2. funcx()
  3. print "--------------------------"
  4. print "this x is out of funcx:-->",x

结果:

  1. this x is in the funcx:--> 9
  2. --------------------------
  3. this x is out of funcx:--> 9

参数收集

函数的参数的个数,当然有不确定性,函数怎么解决这个问题呢?

  1. #/usr/bin/env python
  2. #encoding=utf-8
  3. def func(x,*arg):
  4. print x #输出参数 x 的值
  5. result = x
  6. print arg #输出通过 *arg 方式得到的值
  7. for i in arg:
  8. result +=i
  9. return result
  10.  
  11. print func(1,2,3,4,5,6,7,8,9) #赋给函数的参数个数不仅仅是 2个

运行此代码后,得到如下结果:

  1. 1 #这是函数体内的第一个 print,参数x得到的值是 1
  2. (2, 3, 4, 5, 6, 7, 8, 9) #这是函数内的第二个 print,参数 arg 得到的是一个元组
  3. 45 #最后的计算结果

*args 这种形式的参数接收多个值之外,还可以用 **kargs 的形式接收数值

  1. >>> def foo(**kargs):
  2. ... print kargs
  3. ...
  4. >>> foo(a=1,b=2,c=3) #注意观察这次赋值的方式和打印的结果
  5. {'a': 1, 'c': 3, 'b': 2}

不知道参数到底会可能用什么样的方式传值呀,这好办,把上面的都综合起来。

  1. >>> def foo(x,y,z,*args,**kargs):
  2. ... print x
  3. ... print y
  4. ... print z
  5. ... print args
  6. ... print kargs
  7. ...
  8. >>> foo('qiwsir',2,"python")
  9. qiwsir
  10. 2
  11. python
  12. ()
  13. {}
  14. >>> foo(1,2,3,4,5)
  15. 1
  16. 2
  17. 3
  18. (4, 5)
  19. {}
  20. >>> foo(1,2,3,4,5,name="qiwsir")

Python学习笔记11—函数的更多相关文章

  1. Python学习笔记之函数

    这篇文章介绍有关 Python 函数中一些常被大家忽略的知识点,帮助大家更全面的掌握 Python 中函数的使用技巧 1.函数文档 给函数添加注释,可以在 def 语句后面添加独立字符串,这样的注释被 ...

  2. 小甲鱼:Python学习笔记003_函数

    >>> # 函数>>> def myFirstFunction(params1,params2...): print("这是我的第一个函数!") ...

  3. Python学习笔记 - day6 - 函数

    函数 函数在编程语言中就是完成特定功能的一个词句组(代码块),这组语句可以作为一个单位使用,并且给它取一个名字.可以通过函数名在程序的不同地方多次执行(这叫函数的调用).函数在编程语言中有基本分为:预 ...

  4. python学习笔记(11):文件的访问与函数式编程

    一.文本文件读写的三种方法 1.直接读入 file1 = open('E:/hello/hello.txt') file2 = open('output.txt','w') #w是可写的文件 whil ...

  5. python学习笔记11(函数二): 参数的传递、变量的作用域

    一.函数形参和实参的区别 形参全称是形式参数,在用def关键字定义函数时函数名后面括号里的变量称作为形式参数. 实参全称为实际参数,在调用函数时提供的值或者变量称作为实际参数. >>> ...

  6. Python学习笔记系列——函数

    今年下半年的计划主要是Python和Mysql了,公司不方便看书和视频,就照着廖雪峰的Python网站开始看了.以下纯为个人笔记记录,若是想系统学习的小伙伴还是看这里的好一些,毕竟系统.https:/ ...

  7. python学习笔记11 ----线程、进程、协程

    进程.线程.协程的概念 进程和线程是操作系统中两个很重要的概念,对于一般的程序,可能有若干个进程,每一个进程有若干个同时执行的线程.进程是资源管理的最小单位,线程是程序执行的最小单位(线程可共享同一进 ...

  8. python学习笔记11 ----网络编程

    网络编程 网络编程需要知道的概念 网络体系结构就是使用这些用不同媒介连接起来的不同设备和网络系统在不同的应用环境下实现互操作性,并满足各种业务需求的一种粘合剂.网络体系结构解决互质性问题彩是分层方法. ...

  9. Python学习笔记7-把函数当参数传递、指定可变参数

    把函数当参数传递 # 函数参数传递 # 面向对象编程就是把对象传来传去 # 面向函数编程就是把函数传来传去 def mytest(num): return num * 2 # # 不光可以传递变量,还 ...

随机推荐

  1. Browser对象

    Window对象即浏览器中打开的窗口,当文档里面有框架(frame或者iframe标签)时,浏览器会为HTML文档创建一个window对象,并为每个框架创建一个额外的window对象. 属性close ...

  2. sqlite3常用命令&语法

    sqlite数据库只用一个文件就ok,小巧方便,所以是一个非常不错的嵌入式数据库,SQLite大量的被用于手机,PDA,MP3播放器以及机顶盒设备.    Mozilla Firefox使用SQLit ...

  3. Session机制(是对cookie的作用的提升,使用较多)

    1.Session作用类似于购物车,第一次,放入物品,可以获得Session的id,并可以设置id失效的时间,这样便于多次将物品放在购物车里面,使用的就是获取的Session的id: 2.Sessio ...

  4. angularJS directive详解

    前言 最近学习了下angularjs指令的相关知识,也参考了前人的一些文章,在此总结下. 欢迎批评指出错误的地方. Angularjs指令定义的API AngularJs的指令定义大致如下 angul ...

  5. Radar Installation 分类: POJ 2015-06-15 19:54 8人阅读 评论(0) 收藏

    Radar Installation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 60120   Accepted: 13 ...

  6. Unity-Animator深入系列---测试CrossFade和CrossFadeInFixedTime

    回到 Animator深入系列总目录 CrossFade是按照动画的自身时间进行混合.如果动画10秒,混合持续时间0.2,会在2秒后混合完成 CrossFadeInFixedTime是按照实际时间进行 ...

  7. windows下UDP服务器和客户端的实现

      UDP是面向非连接的协议,因此在实现UDP服务器时,服务器不用总是处于监听状态.可以直接收发数据.   服务器端   1.初始化 WASStartup ( ... )   2.创建Socket s ...

  8. libevent安装及使用

    一.安装libevent 官网:http://libevent.org/ 选择最新版本下载,我选择的是libevent-2.0.22-stable.tar.gz,然后安装README文件中描述的方法编 ...

  9. 网站性能优化之CSS无图片技术:三角形

    1.使用CSS无图片技术,可以总结得到以下三个优点: 减少请求资源的大小: 减少http的请求个数: 提高可维护性. 一.CSS无图片技术,微博中有哪些实际应用呢? 通过上面的展示,我们可以看到,无图 ...

  10. 华东交通大学2016年ACM“双基”程序设计竞赛 1005

    Problem Description 最近侯ry感觉自己在数学方面的造诣不忍直视:他发现他的学习速率呈一个指数函数递增,疯狂的陷入学习的泥潭,无法自拔:他的队友发现了他的学习速率y=e^(b*lna ...