牛刀小试:

  定义一个无参函数

  1. >>> def myFirstFunc():
  2. ... print("Hello python")
  3. ... print("hello world")
  4. ... print("hello my fist func")
  5. ...
  6. >>> myFirstFunc()
  7. Hello python
  8. hello world
  9. hello my fist func

  定义一个有参函数

  1. >>> def mySecondFunc(name):
  2. ... print("hello", name)
  3. ...
  4. >>> mySecondFunc('zhz')
  5. hello zhz

函数之形参和实参

  1. >>> def add(first, second):
  2. ... return first + second
  3. ...
  4. >>> add(1, 5)
  5. 6

定义函数时,first和second就是形参,在函数调用时,传递的1和5就是实参。

函数之注释和文档

  1. >>> def add(first,second):
  2. ... '这是函数文档:计算两个参数的和'
  3. ... #这是函数注释:计算两个参数的和
  4. ... return first + second
  5. ...

函数文档可以使用以下方式查看

  1. >>> add.__doc__
  2. '这是函数文档:计算两个参数的和'
  3.  
  4. >>> help(add)
  5.  
  6. Help on function add in module __main__:
  7.  
  8. add(first, second)
  9. 这是函数文档:计算两个参数的和

函数之关键字参数

  1. >>> def saysome(name, words):
  2. ... print(name, '->', words)
  3. ...
  4. >>> saysome('Jobs', 'stay hungry,stay foolish')
  5. Jobs -> stay hungry,stay foolish
  6. >>> saysome('stay hungry,stay foolish','Jobs')
  7. stay hungry,stay foolish -> Jobs
  8. >>> saysome(words = 'stay hungry,stay foolish',name = 'Jobs')
  9. Jobs -> stay hungry,stay foolish

函数之默认参数

  1. >>> def saysome(name = 'Jobs', words = 'stay hungry, stay foolish'):
  2. ... print(name, '->', words)
  3. ...
  4. >>> saysome()
  5. Jobs -> stay hungry, stay foolish
  6. >>> saysome('nazi')
  7. nazi -> stay hungry, stay foolish
  8. >>> saysome(words = 'keep working')
  9. Jobs -> keep working
  10. >>> saysome('nazi','keep looking')
  11. nazi -> keep looking

函数之收集参数

  1. >>> def test(*params):
  2. ... for i in range(len(params)):
  3. ... print(params[i])
  4. ...
  5. >>> test(1, 'hello', (1,3, ['abc']))
  6. 1
  7. hello
  8. (1, 3, ['abc'])

收集参数后最好使用默认参数,用关键字参数调用。

函数返回值

  python中,用return语句可以从函数返回一个对象,列表或元组。当没有显示调用return语句时,python会自动返回一个NoneType对象。所以,可以说python中只有函数,没有过程。

  1. >>> def hello():
  2. ... print("Hello")
  3. ...
  4. >>> temp = hello()
  5. Hello
  6. >>> print(temp)
  7. None
  8. >>> type(temp)
  9. <class 'NoneType'>
  10. >>> def back():
  11. ... return 1,2,'abc',[1,2]
  12. ...
  13. >>> back()
  14. (1, 2, 'abc', [1, 2])
  15. >>> def back():
  16. ... return [1, 3.14, 'abv', [2]]
  17. ...
  18. >>> back()
  19. [1, 3.14, 'abv', [2]]

局部变量和全局变量

  在函数内部声明的变量是局部变量,在函数外声明的变量是全局变量。

  1. def discount(price,rate):
  2. 'final_price, price, rate are local variables'
  3. final_price = price * rate
  4. return final_price
  5.  
  6. if __name__ == '__main__':
  7. 'old_price, rate and new_price are global variables'
  8. old_price = float(input("原价:"))
  9. rate = float(input("折扣:"))
  10. new_price = discount(old_price, rate)
  11. print("折后价:", new_price)

  在函数中试图修改一个全局变量的值时,会python创建一个和全局变量相同的局部变量,此时,修改的只是该局部变量,全局变量不变。

  1. >>> number = 10
  2. >>> def test():
  3. ... number = 5
  4. ...
  5. ...
  6. >>> test()
  7. >>> number
  8. 10

  要在函数内部修改全局变量的值,可以使用global关键字。

  1. >>> number
  2. 10
  3. >>> def test():
  4. ... global number
  5. ... number = 5
  6. ...
  7. >>> test()
  8. >>> number
  9. 5

内嵌函数

  在函数内部可以定义其他函数,这个内部函数的作用域仅限于外部函数内部。在外部函数外部的任何位置使用该内部函数,都会抛出一个异常。

  1. >>> def funA():
  2. ... print("funA")
  3. ... def funB():
  4. ... print("funB")
  5. ... funB()
  6. ...
  7. >>> funA()
  8. funA
  9. funB
  10. >>> funB()
  11. Traceback (most recent call last):
  12. File "<stdin>", line 1, in <module>
  13. NameError: name 'funB' is not defined

闭包

  如果在一个内部函数里对外部作用域(非全局作用域)的变量进行引用,那么内部函数被认为是一个闭包。

  1. >>> def funX(x):
  2. ... def funY(y):
  3. ... return x*y
  4. ... return funY
  5. ...
  6. >>> i = funX(5)
  7. >>> type(i)
  8. <class 'function'>
  9. >>> i(6)
  10. 30
  11. >>> funX(5)(6)
  12. 30

  同样的,在闭包内修改外部作用域变量,系统会自动创建局部变量x,屏蔽外部变量。

  1. >>> def fun1():
  2. ... x = 5
  3. ... def fun2():
  4. ... x *= x
  5. ... fun2()
  6. ...
  7. >>> fun1()
  8. Traceback (most recent call last):
  9. File "<stdin>", line 1, in <module>
  10. File "<stdin>", line 5, in fun1
  11. File "<stdin>", line 4, in fun2
  12. UnboundLocalError: local variable 'x' referenced before assignment

  此时要修改外部变量,一,可以使用列表,列表不是放在栈里。

  1. >>> def fun1():
  2. ... x = [5]
  3. ... def fun2():
  4. ... x[0] *= x[0]
  5. ... fun2()
  6. ... print(x)
  7. ...
  8. >>> fun1()
  9. [25]

  二,可以使用nolocal关键字

  1. def fun1():
  2. x = 5
  3. def fun2():
  4. nonlocal x
  5. x = 50
  6. fun2()
  7. print(x)
  8.  
  9. if __name__ == '__main__':
  10. fun1()

python学习笔记(十一)之函数的更多相关文章

  1. Python学习笔记之常用函数及说明

    Python学习笔记之常用函数及说明 俗话说"好记性不如烂笔头",老祖宗们几千年总结出来的东西还是有些道理的,所以,常用的东西也要记下来,不记不知道,一记吓一跳,乖乖,函数咋这么多 ...

  2. Python学习笔记010——匿名函数lambda

    1 语法 my_lambda = lambda arg1, arg2 : arg1 + arg2 + 1 arg1.arg2:参数 arg1 + arg2 + 1 :表达式 2 描述 匿名函数不需要r ...

  3. Python学习笔记(Ⅱ)——循环/选择/函数

    一.循环结构 python中提供了for循环和while循环两种操作,没有do……while语句. 1.for循环: 与其他语言中for循环的常见的写法如for (int i=0;i<10;i+ ...

  4. python学习笔记——高阶函数map()

    满足以下两点中任意一点,即为高阶函数: 1.函数接收一个或多个函数作为参数 2.函数返回一个函数 1 描述 用函数和可迭代对象中每一个元素作为参数,计算出新的迭代对象 map() 会根据提供的函数对指 ...

  5. python 学习笔记6(函数)

    函数 定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 特性: 1.减少代码重复 2.保持代码的一致性 3.方便修改,可扩展性 函数的创建 #简单 ...

  6. python学习笔记12(函数三): 参数类型、递归、lambda函数

    一.函数参数的类型 之前我们接触到的那种函数参数定义和传递方式叫做位置参数,即参数是通过位置进行匹配的,从左到右,依次进行匹配,这个对参数的位置和个数都有严格的要求.而在Python中还有一种是通过参 ...

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

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

  8. python学习笔记10(函数一): 函数使用、调用、返回值

    一.函数的定义 在某些编程语言当中,函数声明和函数定义是区分开的(在这些编程语言当中函数声明和函数定义可以出现在不同的文件中,比如C语言),但是在Python中,函数声明和函数定义是视为一体的.在Py ...

  9. Python学习笔记:04函数

    Python 函数 通过分而治之的方法解决问题是一种很自然的思路.函数就是将解决特定问题的方法进行抽象. def fibs(num): 'calculate the first num th fib ...

  10. Python学习笔记总结(二)函数和模块

    一.函数 函数的作用:可以计算出一个返回值,最大化代码重用,最小化代码冗余,流程的分解. 1.函数相关的语句和表达式 语句        例子 Calls        myfunc(‘diege', ...

随机推荐

  1. PHPStorm调试PHP代码~实际操作+mark~~

    因为wamp自己已经下载了xdebug,只要配置开启就行了. 1. 配置php.ini(有就打开注释,没有就加上) XDEBUG Extension[xdebug]zend_extension =&q ...

  2. mysql不能插入中文数据

    上次遇到的是向mysql插入中文数据,中文数据乱码了.这次直接就不能插入中文数据了!!!! 参考博文:http://blog.csdn.net/generalyy0/article/details/7 ...

  3. Hibernate第七篇【对象状态、一级缓存】

    前言 本博文主要讲解Hibernate的细节-->对象的状态和一级缓存- 对象状态 Hibernate中对象的状态: - 临时/瞬时状态 - 持久化状态 - 游离状态 学习Hibernate的对 ...

  4. 短视频图像处理 OpenGL ES 实践

    2017年,短视频正以其丰富的内容表现力和时间碎片化的特点,快速崛起,而短视频最具可玩性之处就在支持人脸识别的动态贴图和各种不同效果的美颜.滤镜等.那短视频动态贴纸.滤镜.美颜等功能究竟是如何实现的呢 ...

  5. 框架应用:Spring framework (二) - AOP技术

    基础概念 线程中的方法栈 java程序虚拟机启动时会载入程序码,虚拟机会为每一条正在运行的线程生成一个方法调用栈,线程以方法运行为执行单位. AOP概念以及目标 AOP是面向切面编程,其实就是在不修改 ...

  6. PHP实现页面静态化

    1.通过buffer来实现   需要用file_put_contents ob_get_clean()等内置函数   ob_start (); include "filterpost.htm ...

  7. Kia's Calculation hdu4726

    Kia's Calculation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  8. Reshape the Matrix

    In MATLAB, there is a very useful function called 'reshape', which can reshape a matrix into a new o ...

  9. JS双击div编辑文本内容

    HTML代码: <div class="album"> <div class="image"><a href="java ...

  10. ajax url参数中文乱码解决方法

    较好的处理办法,对js的url中的中文参数值使用两次encodeURI(),即encodeURI(encodeURI("url的中文参数值")) JS代码: var name=&q ...