Python学习之路--函数
初识函数
可读性,复用性强
定义之后,可以在任何需要它的地方调用
所有函数 只定义不调用不会执行
先定义后调用
def 函数名(): #
函数体
return 返回值
函数调用
函数名()不接收返回值
有返回值 返回值 = 函数名 接收返回值
返回值
return
三种情况
没有返回值 1、不写return,2、只写return,3、return None
def func(): l = ['大老板','廖小胖'] for i in l: print(i) return #出现return,后面内容不执行,即结束一个函数re = func()print(re)#大老板# 廖小胖# None
返回1个值
def func(): return {'k':'v'}print(func())
可以返回任意数据类型
只要返回了,就可以接收到
如果在一个程序中有多个return,只执行第一个
多个返回值
多个返回值用多个变量接收,有多少返回值就用多少变量接收
def func(): return 1,2r1,r2 = func()print(r1,r2)#1 2
可以用一个变量接收,得到的是一个元组
def func(): return 1,2,3r = func()print(r)#(1, 2, 3)
函数参数
s = '大老板廖小胖'def m_len(s): #接收参数 ,接收参数,形式参数,形参 i = 0 for k in s: i += 1 return il = m_len(s)print(l) # 6
def m_len(s): #接收参数 i = 0 for k in s: i += 1 return il = m_len(s)r = m_len([12,34,4])print(l) # 6print(r) #传递参数,传参,实际参数,实参# 6 # 3
没有参数
定义函数和调用函数时括号里不写内容
有一个参数
传什么是什么
多个参数
站在实参角度:
按位置传参
def my_sum(a,b): res = a + b return resre = my_sum(1,2)print(re)默认参数
def qq(l = []): l.append(1) print(l) qq() #[1] qq([]) # [1] qq()#[1,1]
View Code
如果默认参数的值是一个可变数据类型
那么每一次调用函数的时候,如果不传值就公用这个数据类型的资源
按关键字传 def my_sum(a,b): print(a,b)
res = a + b return resre = my_sum(b=2,a=1)print(re)可以混用,但必须先按位置传参,再按照关键字传参 不能给同一个变量,传多个值站在形参的角度:位置参数:必须传,有几个参数就传几个值默认参数:可以不传,使用默认的参数,如果传,就用传递的参数
def classmate(name,sex='男'):print('%s:%s'%(name,sex)) classmate('大老板') classmate('北路') classmate('挥挥','女') # 大老板:男 # 北路:男 # 挥挥:女
调用函数的时候
按照位置传:直接写参数的值
按照关键字:关键字 = 值
定义函数的时候:
位置参数:直接定义参数
默认参数: 关键字参数:参数名 =‘默认的值’
动态参数:可以接受任意多个参数def 函数(*args) 、(**kwargs)
*args:接收的是按照位置传参的值,组织成一个元组
def sum(*args):n = 0for i in args:n += ireturn n print(sum(1,2)) print(sum(1,2,3)) # 3 # 6
def func(*args,l =[]): print(args,l)func(1,2,3,l=[1,2])
**kwargs:接收的是按照关键字传参的值,组织成一个字典
def func(**kwargs):print(kwargs) func(a=1,b=3,c=1) func(a=2,b=1) # {'a': 1, 'b': 3, 'c': 1} # {'a': 2, 'b': 1}
两者一起使用,必须先接收位置参数,再接收关键字参数即*args,必须在**kwargs之前def func(*args,**kwargs): print(args,kwargs)func(1,2,3,4,a = 'aaa',b='bbb')# (1, 2, 3, 4) {'a': 'aaa', 'b': 'bbb'} 动态参数的另一种传参方式
def func(*args): print(args)func(1,2,3,4,5)l =[1,2,3,4,5]func(*l)# (1, 2, 3, 4, 5)# (1, 2, 3, 4, 5)站在实参的角度上,给一个序列加上*,就是将这个序列按照顺序打散站在形参的角度上,给变量加上*,就是组合所以传来的值
def func(**kwargs): print(kwargs)func(a=1,b=2)d = {'a':1,'b':2}func(**d)# {'a': 1, 'b': 2}# {'a': 1, 'b': 2}
顺序: 必须先定义位置参数,后定义默认参数,*args默认参数
函数的注释
def func(): ''' 这个函数实现了什么功能 参数说明 :return: ''' pass
函数的进阶
命名空间
内置命名空间---python解释器
python解释器一启动就可以使用的名字存储在内置命名空间中,内置的名字在启动解释器的时候 被加载进内存里
全局命名空间 ---自己写的代码但不是函数里的代码
在程序从上到下被执行的过程中依次加载进内存的,放置自己设置的所有变量名和函数名
局部命名空间---函数
在函数内部定义的名字,当调用函数时,才产生这个命名空间,这个命名空间就消失了
在局部:可使用全局、内置命名空间中的名字
在全局:可使用内置命名空间的名字,不能使用局部的
在内置:不能使用局部、全局
内置>全局>局部
依赖倒置原则,上层模块依赖下层依赖。局部依赖全部,全部依赖内置
在正常情况下,直接使用内置名字
当在全局定义了和内置命名空间相同的名字时,会使用全局的名字
当自己有的时候,不找上级要,如果上级没有再找上级要,找到内置也没有,就会报错
def max(l):print('in th max') print(max([1,2,3])) # in th max # None
作用域
全局作用域 作用于全局 globals()
局部作用域 作用于局部 使用locals()查看局部变量的名字
对于不可变数据类型,在局部可以查看全局作用域中的变量,如想要修改,在变量前加上global
如果在局部内声明一个global变量,则这个变量在局部所有操作将对全局有效
函数的嵌套
def max(a,b): return a if a>b else b def the_max(x,y,z): c = max(x,y) return max(c,z)print(the_max(1,2,3)) #3函数的嵌套定义 内部函数可以使用外部函数的变量
def outer(): def inner():#函数定义后必须调用才会执行 print('inner') inner()outer()#inner
def outer():a =1def inner():b = 2print(a)print('inner')def inner2():print(a,b)print('inner2')inner2()inner() outer() # 1 # inner # 1 2 # inner2
View Code
a = 1 def outer():a =1def inner():b = 2print(a)print('inner')def inner2():global aa += 1print('inner2')inner2()inner()print('**',a) outer() print('全局:',a) # 1 # inner # inner2 # ** 1 # 全局: 2
View Code
nonlocal 声明一个上层最近的局部变量,只能用于局部变量,声明了nonlocal的内部函数变量修改会影响到离当前函数最近一层的局部变量,对全局无效
a = 1 def outer():a =1def inner():b = 2print(a)print('inner')def inner2():nonlocal aa += 1print('inner2')inner2()inner()print('**',a) outer() print('全局:',a) # 1 # inner # inner2 # ** 2 # 全局: 1
View Code
函数名的本质
第一类对象
函数名就是内存地址
def func(): print(123)func()func2 =funcfunc()# 123# 123 函数名可以赋值 函数名可以作为容器类型的元素
def func():print(123) func() func2 =func l = [func,func2] print(l) for i in l:print(i)# 123# # # [ < function# # # func# # # at# # # 0x000001EA9DA91A60 >, < function# # # func# # # at# # # 0x000001EA9DA91A60 >]# # # < function# # # func# # # at# # # 0x000001EA9DA91A60 ># # # < function# # # func# # # at# # # 0x000001EA9DA91A60 >
View Code
函数名可以作为函数的参数
def func():print(123)def hh(f):f()hh(func)#123
View Code
函数名可以作为函数的返回值
def func():print(123def hh(f):f()return f qq = hh(func) qq() # 123 # 123
View Code
闭包
嵌套函数,且内部函数调用外部函数的变量
def outer():a = 1def inner():print(a)return inner inn = outer() inn() #1
View Code
def outer():a = 1def inner():print(a)return inner inn = outer() inn() #1
View Code
from urllib.request import urlopen def get_url():url = 'http://www.baidu.com'def get():ret = urlopen(url).read()print(ret)return get get_fu = get_url() get_fu()
View Code
转载于:https://www.cnblogs.com/rssblogs/p/10922162.html
Python学习之路--函数相关推荐
- python学习之路---函数:定义def、调用、返回值return、参数说明、参数陷阱
#函数 #可读性强,复用性强 #函数定义:定义了之后,可以在任何需要的地方调用 #格式: def 函数名(): 例子:def mylen(): # 没有返回长度,只能单纯的打印 # return 返回 ...
- Python学习之路—2018/7/14
Python学习之路-2018/7/12 3.功能开发 3.3 设计博客首页 博客首页中最重要的就是中间的文章区域,所以我首先把文章区域设计出来,一开始并没有数据,如果用orm添加或者直接在数据库添加 ...
- Python学习之路9☞面向对象的程序设计
Python学习之路9☞面向对象的程序设计 一 面向对象的程序设计的由来 见概述:http://www.cnblogs.com/linhaifeng/articles/6428835.html 二 什 ...
- Python学习之路5☞文件处理
Python学习之路5☞文件处理 一.文件处理流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 1 正趣果上果 2 Interesting fruit fruit 3 4 ...
- 我的Python学习之路(一)_Mr_Ouyang
我的Python学习之路(一)_Mr_Ouyang 笔者按: 本文从18:55开始写作,至19:38中断,又从21:12始继续,至23:22写就. 共计耗时113分钟,总字数9081字,约80.4字/ ...
- python学习之路:python连接阿里云ODPS
python学习之路:python连接阿里云ODPS 前言 本人最近在学习使用ODPS,希望把学习过程记录下来,方便自己查阅. 1.安装ODPS pip install ODPS 2.连接阿里云odp ...
- Python学习之路【第一篇】-Python简介和基础入门
1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是 ...
- python之路 mysql 博客园_教为学:Python学习之路(二):MySQLdb的几种安装方式,以及用Python测试连接MySql...
教为学:Python学习之路(二):MySQLdb的几种安装方式,以及用Python测试连接MySql Easy_install安装MySQLdb 很简单,以至于我不晓得该怎么说.一句话. sodu ...
- Python学习之路—2018/6/20
Python学习之路-2018/6/20 1.模板语法之变量 views.py def index(request):import datetimes="gyq"l=[1,2,3] ...
最新文章
- 我收藏的谷歌和阿里大佬的刷题笔记
- Alphabet量子公司横空出世!Sandbox将与谷歌、DeepMind成姊妹
- 使用JavaScript在文本框中的Enter键上触发按钮单击
- python中的命令行参数_python学习笔记6:命令行参数
- html5标签的兼容性处理
- ActiveX控件的另类免费签名法
- 关于二维数组取地址加以或减一解引用问题
- python十进制转换_Python进制转换
- 一元、二元、三元逻辑运算符
- python彩票预测算法软件_python用遗传算法 神经网络 模糊逻辑控制算法对彩票乐透数据进行预测...
- Windows Server 2012和2016从Evaluation评估版升级到正式版方法(附带产品密钥/key)
- MTK nvram介绍
- %3c php 能用什么代替,Phpwind9
- 用MATLAB绘制两个圆相切,教您用几何绘图工具画三个两两相切的圆
- pr中创建镜像效果,并用渐变进行过渡
- 【MySQL】插入语句汇总
- Java之socket网络编程
- 基于51单片机的蓄电池容量检测系统的设计(设计资料)
- 求救,华为S5720-36c-ei交换机vlan
- [攻防世界]-WEB高手进阶区-Web_python_block_chain
热门文章
- python如何爬虫-如何使用python爬虫爬取要登陆的网站
- python写小程序-用python写个简单的小程序,编译成exe跑在win10上
- python大神-6年Python大神总结10个开发技巧,80%的人都不会
- python画动图-利用Python如何制作好玩的GIF动图详解
- python视频教学视频哪个好-python视频教程哪家好
- python处理数据的优势-Python与其他语言相比有哪些优势?
- pythonweb开发-PythonWeb开发教程(一),开发之前需要准备什么
- python和c哪个好学-c语言和python哪个容易
- python中文叫什么意思-在python中,“~”是什么意思?
- python中文什么意思-python是什么