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学习笔记之常用函数及说明
		Python学习笔记之常用函数及说明 俗话说"好记性不如烂笔头",老祖宗们几千年总结出来的东西还是有些道理的,所以,常用的东西也要记下来,不记不知道,一记吓一跳,乖乖,函数咋这么多 ... 
- Python学习笔记010——匿名函数lambda
		1 语法 my_lambda = lambda arg1, arg2 : arg1 + arg2 + 1 arg1.arg2:参数 arg1 + arg2 + 1 :表达式 2 描述 匿名函数不需要r ... 
- Python学习笔记(Ⅱ)——循环/选择/函数
		一.循环结构 python中提供了for循环和while循环两种操作,没有do……while语句. 1.for循环: 与其他语言中for循环的常见的写法如for (int i=0;i<10;i+ ... 
- python学习笔记——高阶函数map()
		满足以下两点中任意一点,即为高阶函数: 1.函数接收一个或多个函数作为参数 2.函数返回一个函数 1 描述 用函数和可迭代对象中每一个元素作为参数,计算出新的迭代对象 map() 会根据提供的函数对指 ... 
- python 学习笔记6(函数)
		函数 定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 特性: 1.减少代码重复 2.保持代码的一致性 3.方便修改,可扩展性 函数的创建 #简单 ... 
- python学习笔记12(函数三): 参数类型、递归、lambda函数
		一.函数参数的类型 之前我们接触到的那种函数参数定义和传递方式叫做位置参数,即参数是通过位置进行匹配的,从左到右,依次进行匹配,这个对参数的位置和个数都有严格的要求.而在Python中还有一种是通过参 ... 
- python学习笔记11(函数二): 参数的传递、变量的作用域
		一.函数形参和实参的区别 形参全称是形式参数,在用def关键字定义函数时函数名后面括号里的变量称作为形式参数. 实参全称为实际参数,在调用函数时提供的值或者变量称作为实际参数. >>> ... 
- python学习笔记10(函数一): 函数使用、调用、返回值
		一.函数的定义 在某些编程语言当中,函数声明和函数定义是区分开的(在这些编程语言当中函数声明和函数定义可以出现在不同的文件中,比如C语言),但是在Python中,函数声明和函数定义是视为一体的.在Py ... 
- Python学习笔记:04函数
		Python 函数 通过分而治之的方法解决问题是一种很自然的思路.函数就是将解决特定问题的方法进行抽象. def fibs(num): 'calculate the first num th fib ... 
- Python学习笔记总结(二)函数和模块
		一.函数 函数的作用:可以计算出一个返回值,最大化代码重用,最小化代码冗余,流程的分解. 1.函数相关的语句和表达式 语句 例子 Calls myfunc(‘diege', ... 
随机推荐
- mysql水平分表和垂直分表的优缺点
			表分割有两种方式: 1.水平分割:根据一列或多列数据的值把数据行放到两个独立的表中. 水平分割通常在下面的情况下使用. •表很大,分割后可以降低在查询时需要读的数据和索引的页数,同时也降低了索引的层数 ... 
- 深入浅出数据结构C语言版(20)——快速排序
			正如上一篇博文所说,今天我们来讨论一下所谓的"高级排序"--快速排序.首先声明,快速排序是一个典型而又"简单"的分治的递归算法. 递归的威力我们在介绍插入排序时 ... 
- [python学习笔记] 开篇
			今天开始学习markdown,立贴为证. 平均一天一小时.两个月先学完基础. 所有的帖子只为了学习记录,有不对的请提出,轻吐槽 
- FastDFS安装步骤
			FastDFS是用c语言编写的一款开源的分布式文件系统,充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用.高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传.下 ... 
- 51nod 1118 机器人走方格 解题思路:动态规划 & 1119 机器人走方格 V2 解题思路:根据杨辉三角转化问题为组合数和求逆元问题
			51nod 1118 机器人走方格: 思路:这是一道简单题,很容易就看出用动态规划扫一遍就可以得到结果, 时间复杂度O(m*n).运算量1000*1000 = 1000000,很明显不会超时. 递推式 ... 
- JS方法总结
			1.普通的方法定义 function(){ } 2.变量方法定义 var text=function(){ } 3.对象方法定义 text:function(){ } 4.ES6 text(x=0,y ... 
- 图解clientWidth,offsetWidth,scrollWidth,scrollTop
			新手看到这几个属性,很头疼,参考了网上一些文章,加上自己实践,给出对这几个属性的解释 我把代码贴上来,方便大家验证 在chrome浏览器中,不知为什么图片容器高度比图片高度多了4px,把图片设置为bl ... 
- Centos7安装Percona5.7
			OS: Centos7.0 DB: Percona5.7 1. 通过yum安装 ## 删除之前的mysql数据库, 我用的是centos7.再安装虚拟机的时候,预装了很多软件.所以mysql和mari ... 
- Nunit测试工具使用实例
			前言: 本文主要是介绍了Nunit的基本使用,其中参详了很多已有的文章,由于最近要使用其进行测试,所以对网上的文章做了下整理,同时加入了一些自己的实践. NUnit的属性 TestFixture 它标 ... 
- 常用硬件设备GUID
			Class GUID Device Description CDROM 4D36E965-E325-11CE-BFC1-08002BE10318 CD/DVD/Blu-ray drives DiskD ... 
