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', ...
随机推荐
- 鸟哥Linux学习笔记03
1, 在Linux中,默认情况下所有的系统上的账号都记录在/etc/passwd这个文件内,密码记录在/etc/shadow这个文件下,所有的组名都记录在/etc/group内,这三个文件可以说是Li ...
- Node.js博客搭建
Node.js 博客搭建 一. 学习需求 Node 的安装运行 会安装node,搭建node环境 会运行node. 基础模块的使用 Buffer:二进制数据处理模块 Event:事件模块 fs:文件系 ...
- 保存数据到sdcard中去
这里只贴上核心的代码:其它自行脑补!
- 【DDD】领域驱动设计实践 —— UI层实现
前面几篇blog主要介绍了DDD落地架构及业务建模战术,后续几篇blog会在此基础上,讲解具体的架构实现,通过完整代码demo的形式,更好地将DDD的落地方案呈现出来.本文是架构实现讲解的第一篇,主要 ...
- php字符的替换,截取,指定查找
<?php/** * Created by 郭鹏. * User: msi * Date: 2017/9/27 * Time: 14:17 *///随机数生成器echo rand();echo ...
- 快速搭建属于自己的数据库——mongodb
为了真实模拟一个项目上线,拥有前端后端数据库都具备的功能,我选择了mongodb作为项目的数据库支持,这里分享一些mongodb的经验心得和血的教训. mongoddb安装 在本地安装 直接通过官网下 ...
- vue实例讲解之axios的使用
本篇来讲解一下axios插件的使用,axios是用来做数据交互的插件. 这篇将基于vue实例讲解之vue-router的使用这个项目的源码进行拓展. axios的使用步骤: 1.安装axios npm ...
- JSON依赖的选择
json-lib 源码:https://github.com/aalmiray/Json-lib/ 最新版本:2.4 不再更新 <dependency> <groupId>ne ...
- Android开发更新UI的几种方式
1.runOnUiThread 2.handler post 3.handler sendmessage 4.view post xml布局文件: <RelativeLayout xmlns:a ...
- UWP brush
---some words---- 1.Alpha:透明度 2.Argb :Alpha red green blue 3.brush: [brʌʃ] 刷子,笔画,笔刷 4.fore 前头 5.F ...