牛刀小试:

  定义一个无参函数

 >>> 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学习笔记(十二)—Python3中pip包管理工具的安装【转】

    本文转载自:https://blog.csdn.net/sinat_14849739/article/details/79101529 版权声明:本文为博主原创文章,未经博主允许不得转载. https ...

  2. python学习笔记十——模块与函数

    第五章 模块与函数 5.1 python程序的结构 函数+类->模块              模块+模块->包                 函数+类+模块+包=Python pyth ...

  3. python学习笔记(十 二)、操作数据库

    每一种语言都少不了多数据库进行各种操作. python支持多种数据库.有关python支持的数据库清单,请参阅:https://wiki.python.org/moin/DatabaseInterfa ...

  4. python 学习笔记(十二) 文件和序列化

    python 文件读写和序列化学习.## python文件读写`1 打开并且读取文件` f = open('openfile.txt','r') print(f.read()) f.close() ` ...

  5. Python学习札记(十二) Function3 函数参数一

    参考:函数参数 Note 1.Python的函数定义非常简单,但灵活度却非常大.除了正常定义的必选参数外,还可以使用默认参数.可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以 ...

  6. Python学习日记(十二) 匿名函数

    匿名函数: 未解决一些简单的需求而设计的函数 语法: func = lambda x : x**2 func:函数名 lambda:类似def的关键字 x:参数 x**2:返回值表达式 适用内置函数: ...

  7. python 学习笔记十二 html基础(进阶篇)

    HTML 超级文本标记语言是标准通用标记语言下的一个应用,也是一种规范,一种标准,它通过标记符号来标记要显示的网页中的各个部分.网页文件本身 是一种文本文件,通过在文本文件中添加标记符, 可以告诉浏览 ...

  8. Python学习笔记十二

    HTML全称:Hyper Text Markup Language超文本标记语言 不是编程语言 HTML使用标记标签来描述网页 2.  HTML标签 开始标签,结束标签.  例如:<html&g ...

  9. python学习笔记十二:类的定义

    demo #!/usr/bin/python class Person: name = 'jim' age = 25 def say(self): print 'My name is ' + self ...

  10. python学习笔记(十二)-网络编程

    本文结束使用 Requests 发送网络请求.requests是一个很实用的Python HTTP客户端库,编写爬虫和测试服务器响应数据时经常会用到.可以说,Requests 完全满足如今网络的需求. ...

随机推荐

  1. 西南大学校园网客户端共享网络之路由器开wifi

    1年前出了NetKeeper,让寝室只能一个人用一个账号,而且,在寝室平板手机什么的只能靠360wifi什么的来维持了,电脑一直不能关,确实让人不爽. 最近学校又出台了swu-wifi-dorm来让寝 ...

  2. 编写shell时,遇到let: not found错误及解决办法

    #!/bin/bashi=1sum=0while [ $i -le 100 ]do  let sum=sum+$i  let i++ done 在写一个简单的循环脚本时,报错 let: not fou ...

  3. SQL 抛出异常的例子 RAISERROR 的使用

    先创建一个procedure 当输入的值不在0-100之间时会报出异常 create proc proc_x @a int as begin ) ,) else select @a end go 测试 ...

  4. 【C++】为多态基类声明virtual析构函数

    来自<Effective C++>条款07:为多态声明virtual析构函数 当derived class对象经由一个base class指针被删除,而该base class带着一个non ...

  5. Android手机Fiddler真机抓包

    Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许用户监视,设置断点,甚至修改输入输出数据,Fiddler包含了一个强大的基于事件脚本的子系统 ...

  6. 第115天:Ajax 中artTemplate模板引擎(一)

    一.不分离与分离的比较 1.前后端不分离,以freemarker模板引擎为例,看一下不分离的前后端请求的流程是什么样的? 从上图可以看出,前后端开发人员的工作耦合主要在(3)Template的使用.后 ...

  7. C++解析(29):类型识别

    0.目录 1.类型识别 2.动态类型识别 3.类型识别关键字 4.小结 1.类型识别 在面向对象中可能出现下面的情况: 基类指针指向子类对象 基类引用成为子类对象的别名 静态类型--变量(对象)自身的 ...

  8. Python常忘的进阶知识(下)

    0.目录 1.装饰器 1.1 为每个函数都增加一个功能 1.2 装饰器只是一种模式 1.3 语法糖 1.4 函数需要传递参数,该如何更改装饰器? 1.5 函数需要传递关键字参数,该如何更改装饰器? 2 ...

  9. OSPF虚连接简单配置

    实验实例:<华为路由器学习指南>P715 本实例的拓扑结构如图:Area 2没有直接与骨干区域直接相连,Area 1被用作传输区域来连接Area 0与Area2.为了使Area2与骨干区域 ...

  10. 【刷题】BZOJ 2152 聪聪可可

    Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)--遇到这种问题,一般情况下石头剪刀布就好 ...