牛刀小试:

  定义一个无参函数

 >>> def myFirstFunc():
... print("Hello python")
... print("hello world")
... print("hello my fist func")
...
>>> myFirstFunc()
Hello python
hello world
hello my fist func

  定义一个有参函数

 >>> def mySecondFunc(name):
... print("hello", name)
...
>>> mySecondFunc('zhz')
hello zhz

函数之形参和实参

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

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

函数之注释和文档

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

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

 >>> add.__doc__
'这是函数文档:计算两个参数的和' >>> help(add) Help on function add in module __main__: add(first, second)
这是函数文档:计算两个参数的和

函数之关键字参数

 >>> def saysome(name, words):
... print(name, '->', words)
...
>>> saysome('Jobs', 'stay hungry,stay foolish')
Jobs -> stay hungry,stay foolish
>>> saysome('stay hungry,stay foolish','Jobs')
stay hungry,stay foolish -> Jobs
>>> saysome(words = 'stay hungry,stay foolish',name = 'Jobs')
Jobs -> stay hungry,stay foolish

函数之默认参数

 >>> def saysome(name = 'Jobs', words = 'stay hungry, stay foolish'):
... print(name, '->', words)
...
>>> saysome()
Jobs -> stay hungry, stay foolish
>>> saysome('nazi')
nazi -> stay hungry, stay foolish
>>> saysome(words = 'keep working')
Jobs -> keep working
>>> saysome('nazi','keep looking')
nazi -> keep looking

函数之收集参数

 >>> def test(*params):
... for i in range(len(params)):
... print(params[i])
...
>>> test(1, 'hello', (1,3, ['abc']))
1
hello
(1, 3, ['abc'])

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

函数返回值

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

 >>> def hello():
... print("Hello")
...
>>> temp = hello()
Hello
>>> print(temp)
None
>>> type(temp)
<class 'NoneType'>
>>> def back():
... return 1,2,'abc',[1,2]
...
>>> back()
(1, 2, 'abc', [1, 2])
>>> def back():
... return [1, 3.14, 'abv', [2]]
...
>>> back()
[1, 3.14, 'abv', [2]]

局部变量和全局变量

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

 def discount(price,rate):
'final_price, price, rate are local variables'
final_price = price * rate
return final_price if __name__ == '__main__':
'old_price, rate and new_price are global variables'
old_price = float(input("原价:"))
rate = float(input("折扣:"))
new_price = discount(old_price, rate)
print("折后价:", new_price)

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

 >>> number = 10
>>> def test():
... number = 5
...
...
>>> test()
>>> number
10

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

 >>> number
10
>>> def test():
... global number
... number = 5
...
>>> test()
>>> number
5

内嵌函数

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

 >>> def funA():
... print("funA")
... def funB():
... print("funB")
... funB()
...
>>> funA()
funA
funB
>>> funB()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'funB' is not defined

闭包

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

 >>> def funX(x):
... def funY(y):
... return x*y
... return funY
...
>>> i = funX(5)
>>> type(i)
<class 'function'>
>>> i(6)
30
>>> funX(5)(6)
30

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

 >>> def fun1():
... x = 5
... def fun2():
... x *= x
... fun2()
...
>>> fun1()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in fun1
File "<stdin>", line 4, in fun2
UnboundLocalError: local variable 'x' referenced before assignment

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

 >>> def fun1():
... x = [5]
... def fun2():
... x[0] *= x[0]
... fun2()
... print(x)
...
>>> fun1()
[25]

  二,可以使用nolocal关键字

 def fun1():
x = 5
def fun2():
nonlocal x
x = 50
fun2()
print(x) if __name__ == '__main__':
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. HIbernate实体类注解配置

    一.类级别注解 1.@Entity(name="EntityName") 必须 name为可选,对应数据库中一的个表 2.@Table(name="",cata ...

  2. CryptoTools加密与解密

    CryptoTools加密与解密 java常用的加密算法有MD5(Message Digest algorithm 5,信息摘要算法) BASE64(严格地说,属于编码格式,而非加密算法) SHA(S ...

  3. Split分割字符串

    第一种方法:打开vs.net新建一个控制台项目.然后在Main()方法下输入下面的程序. string s="abcdeabcdeabcde"; string[] sArray=s ...

  4. JSP入门 导出文件

    1.图片校验码 <img  src="captcha.jpg"  /> web.xml配置 <servlet>      <servlet-name& ...

  5. poj2337欧拉回路要求输出路径

                         Catenyms Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8368   Ac ...

  6. 关于加载离线SHP文件、geodatabase文件所遇到的路径问题

    正文开始之前还是先吐槽一下,一行代码DEBUG了一天不知道怎么改,终于误打误撞弄出来了(以下以shp文件为例) 对于虚拟机测试 public String getPath(){ File sdDir ...

  7. H264 NAL解析

    NAL全称Network Abstract Layer,即网络抽象层.在H.264/AVC视频编码标准中,整个系统框架被分为了两个层面:视频编码层面(VCL)和网络抽象层面(NAL).其中,前者负责有 ...

  8. Vue 爬坑之路(六)—— 使用 Vuex + axios 发送请求

    Vue 原本有一个官方推荐的 ajax 插件 vue-resource,但是自从 Vue 更新到 2.0 之后,官方就不再更新 vue-resource 目前主流的 Vue 项目,都选择 axios ...

  9. ubuntu命令查询版本和内核版本

    1.查看ubuntu版本号: 方法一: cat  /etc/issue 返回结果: Ubuntu 6.06.2 LTS \n \l   方法二: sudo lsb_release -a  返回结果: ...

  10. ZOJ2402 Lenny's Lucky Lotto List 简单DP

    Lenny's Lucky Lotto Lists Time Limit: 2 Seconds      Memory Limit:65536 KB Lenny likes to play the g ...