初识函数

可读性,复用性强

定义之后,可以在任何需要它的地方调用

所有函数 只定义不调用不会执行

先定义后调用

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学习之路--函数相关推荐

  1. python学习之路---函数:定义def、调用、返回值return、参数说明、参数陷阱

    #函数 #可读性强,复用性强 #函数定义:定义了之后,可以在任何需要的地方调用 #格式: def 函数名(): 例子:def mylen(): # 没有返回长度,只能单纯的打印 # return 返回 ...

  2. Python学习之路—2018/7/14

    Python学习之路-2018/7/12 3.功能开发 3.3 设计博客首页 博客首页中最重要的就是中间的文章区域,所以我首先把文章区域设计出来,一开始并没有数据,如果用orm添加或者直接在数据库添加 ...

  3. Python学习之路9☞面向对象的程序设计

    Python学习之路9☞面向对象的程序设计 一 面向对象的程序设计的由来 见概述:http://www.cnblogs.com/linhaifeng/articles/6428835.html 二 什 ...

  4. Python学习之路5☞文件处理

    Python学习之路5☞文件处理 一.文件处理流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 1 正趣果上果 2 Interesting fruit fruit 3 4 ...

  5. 我的Python学习之路(一)_Mr_Ouyang

    我的Python学习之路(一)_Mr_Ouyang 笔者按: 本文从18:55开始写作,至19:38中断,又从21:12始继续,至23:22写就. 共计耗时113分钟,总字数9081字,约80.4字/ ...

  6. python学习之路:python连接阿里云ODPS

    python学习之路:python连接阿里云ODPS 前言 本人最近在学习使用ODPS,希望把学习过程记录下来,方便自己查阅. 1.安装ODPS pip install ODPS 2.连接阿里云odp ...

  7. Python学习之路【第一篇】-Python简介和基础入门

    1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是 ...

  8. python之路 mysql 博客园_教为学:Python学习之路(二):MySQLdb的几种安装方式,以及用Python测试连接MySql...

    教为学:Python学习之路(二):MySQLdb的几种安装方式,以及用Python测试连接MySql Easy_install安装MySQLdb 很简单,以至于我不晓得该怎么说.一句话. sodu ...

  9. Python学习之路—2018/6/20

    Python学习之路-2018/6/20 1.模板语法之变量 views.py def index(request):import datetimes="gyq"l=[1,2,3] ...

最新文章

  1. 我收藏的谷歌和阿里大佬的刷题笔记
  2. Alphabet量子公司横空出世!Sandbox将与谷歌、DeepMind成姊妹
  3. 使用JavaScript在文本框中的Enter键上触发按钮单击
  4. python中的命令行参数_python学习笔记6:命令行参数
  5. html5标签的兼容性处理
  6. ActiveX控件的另类免费签名法
  7. 关于二维数组取地址加以或减一解引用问题
  8. python十进制转换_Python进制转换
  9. 一元、二元、三元逻辑运算符
  10. python彩票预测算法软件_python用遗传算法 神经网络 模糊逻辑控制算法对彩票乐透数据进行预测...
  11. Windows Server 2012和2016从Evaluation评估版升级到正式版方法(附带产品密钥/key)
  12. MTK nvram介绍
  13. %3c php 能用什么代替,Phpwind9
  14. 用MATLAB绘制两个圆相切,教您用几何绘图工具画三个两两相切的圆
  15. pr中创建镜像效果,并用渐变进行过渡
  16. 【MySQL】插入语句汇总
  17. Java之socket网络编程
  18. 基于51单片机的蓄电池容量检测系统的设计(设计资料)
  19. 求救,华为S5720-36c-ei交换机vlan
  20. [攻防世界]-WEB高手进阶区-Web_python_block_chain

热门文章

  1. python如何爬虫-如何使用python爬虫爬取要登陆的网站
  2. python写小程序-用python写个简单的小程序,编译成exe跑在win10上
  3. python大神-6年Python大神总结10个开发技巧,80%的人都不会
  4. python画动图-利用Python如何制作好玩的GIF动图详解
  5. python视频教学视频哪个好-python视频教程哪家好
  6. python处理数据的优势-Python与其他语言相比有哪些优势?
  7. pythonweb开发-PythonWeb开发教程(一),开发之前需要准备什么
  8. python和c哪个好学-c语言和python哪个容易
  9. python中文叫什么意思-在python中,“~”是什么意思?
  10. python中文什么意思-python是什么