python学习笔记(十二)之函数
牛刀小试:
定义一个无参函数
>>> 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学习笔记(十二)之函数的更多相关文章
- Python学习笔记(十二)—Python3中pip包管理工具的安装【转】
本文转载自:https://blog.csdn.net/sinat_14849739/article/details/79101529 版权声明:本文为博主原创文章,未经博主允许不得转载. https ...
- python学习笔记十——模块与函数
第五章 模块与函数 5.1 python程序的结构 函数+类->模块 模块+模块->包 函数+类+模块+包=Python pyth ...
- python学习笔记(十 二)、操作数据库
每一种语言都少不了多数据库进行各种操作. python支持多种数据库.有关python支持的数据库清单,请参阅:https://wiki.python.org/moin/DatabaseInterfa ...
- python 学习笔记(十二) 文件和序列化
python 文件读写和序列化学习.## python文件读写`1 打开并且读取文件` f = open('openfile.txt','r') print(f.read()) f.close() ` ...
- Python学习札记(十二) Function3 函数参数一
参考:函数参数 Note 1.Python的函数定义非常简单,但灵活度却非常大.除了正常定义的必选参数外,还可以使用默认参数.可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以 ...
- Python学习日记(十二) 匿名函数
匿名函数: 未解决一些简单的需求而设计的函数 语法: func = lambda x : x**2 func:函数名 lambda:类似def的关键字 x:参数 x**2:返回值表达式 适用内置函数: ...
- python 学习笔记十二 html基础(进阶篇)
HTML 超级文本标记语言是标准通用标记语言下的一个应用,也是一种规范,一种标准,它通过标记符号来标记要显示的网页中的各个部分.网页文件本身 是一种文本文件,通过在文本文件中添加标记符, 可以告诉浏览 ...
- Python学习笔记十二
HTML全称:Hyper Text Markup Language超文本标记语言 不是编程语言 HTML使用标记标签来描述网页 2. HTML标签 开始标签,结束标签. 例如:<html&g ...
- python学习笔记十二:类的定义
demo #!/usr/bin/python class Person: name = 'jim' age = 25 def say(self): print 'My name is ' + self ...
- python学习笔记(十二)-网络编程
本文结束使用 Requests 发送网络请求.requests是一个很实用的Python HTTP客户端库,编写爬虫和测试服务器响应数据时经常会用到.可以说,Requests 完全满足如今网络的需求. ...
随机推荐
- 简单的 php 防注入、防跨站 函数
/** * 简单的 php 防注入.防跨站 函数 * @return String */ function fn_safe($str_string) { //直接剔除 $_arr_dangerChar ...
- php面试必知必会常见问题
1 说出常用的10个数组方法 我觉得数组比较最能体现PHP基础语法的一个数据结构了,下面给大家列一下常用的10个关于操作数组的函数 in_array(判断数组中是否有某个元素) implode(将数组 ...
- socket与TCP/UDP编程~
ket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序.要学Internet上的TCP/IP网络编程,必须理解Socket接口. ...
- 在python3中使用urllib.request编写简单的网络爬虫
转自:http://www.cnblogs.com/ArsenalfanInECNU/p/4780883.html Python官方提供了用于编写网络爬虫的包 urllib.request, 我们主要 ...
- asp.net 中使用 pagedlist 分页并具有查询功能的实现方法
用pagedlist在项目中做分页已N次了,今天再次用实例来实现一个带查询功能的分页例子. 1.在view代码: @using PagedList.Mvc@model BGZS.Models.User ...
- EM算法[转]
最大期望算法:EM算法. 在统计计算中,最大期望算法(EM)是在概率模型中寻找参数最大似然估计或者最大后验估计的算法,其中概率模型依赖于无法观测的隐藏变量. 最大期望算法经过两个步骤交替进行计算: 第 ...
- Infinity NaN undefined和null
Infinity属性用于存放表示正无穷大的数值. 负无穷大是表示负无穷大一个数字值. 该属性为Global对象的一个只读属性, 所有主流浏览器均支持该属性. Infinity属性的值为Number类型 ...
- 【明哥报错簿】之【解决eclipse项目小红叉】
解决方案: 0.如果是jdk版本不一致,直接右击项目名称,选择maven里面的update project.原因一般是maven的pom.xml里面设置的编译插件org.apache.maven.pl ...
- 【CF625E】Frog Fights(模拟)
[CF625E]Frog Fights(模拟) 题面 CF 洛谷 翻译: 有\(n\)只青蛙在一个被分为了\(m\)等分的圆上,对于每份顺时针依次标号. 初始时每只青蛙所在的位置是\(p_i\),速度 ...
- 洛谷P2125图书馆书架上的书 题解报告
题目描述 图书馆有n个书架,第1个书架后面是第2个书架,第2个书架后面是第3个书架……第n-1个书架后面是第n个书架,第n个书架后面是第1个书架,第i个书架上有b[i]本书.现在,为了让图书馆更美观, ...