函数的基本概念

1.什么是函数?
函数相当于一种工具,就是把一串代码装到一起,我们下次需要用的这个功能的时候可以直接使用
函数相当于是工具(具有一定功能)
不用函数
修理工需要修理器件要用锤子 原地打造 每次用完就扔掉 下次用继续原地打造
用函数
修理工提前准备好工具 什么时候想用就直接拿出来使用 代码举例;
count = 0
for i in name_list:
count += 1
print(count)
#这就是一个可以查看列表元素个数的代码
如果需要反复使用我们就可以把它设置成一个函数 2.函数的作用
如果一段代码需要在不同的位置,多次反复执行
那我们就可以把这一段代码封装成一个函数
方便我们随时可以使用
函数也可以通过收到不同的参数作出不同的结果。

函数的语法结构

关键词  def
代码格式:
def 函数名称(参数):
'''函数注释
要写一个这个函数是做什么的,怎么使用'''
函数内的代码块
return 返回值
#函数命名要做到见面知意
#参数,可有可无。主要调用函数时规定是否需要外界输入某些数据
#函数体代码 函数功能的核心内容,也代表这个函数是如何运作的
#return 返回值 可有可无,指函数运行结束后返回的值

函数的定义与调用

1,定义函数
def 函数名称(参数):
pass
#函数在定义的时候不会执行函数体代码,只要语法正确就可以, 2.调用函数
函数名称()
#直接使用函数名称进行调用,当调用函数的时候 函数里面的子代码才会开始执行 3,函数必须先定义后才可以进行调用

函数的分类

1.空函数
函数里面的代码为空,或者只是先使用pass进行了补全的
举例:def add_users():
pass
作用与项目开始初期搭建功能框架的,先搭建大概需要用到哪些功能哪些函数 后期可以再补全 2.无参函数
定义函数时,括号内没有参数
def 函数名():
print('我不需要传参')
#不需要外界传参的函数类型 3.有参函数
定义函数时,括号内有需要接受的参数
def 函数名(name):
print(name)
#需要外界传递的数据,根据外界传递的数据进行处理

函数的返回值

1.什么是返回值
调用过函数后返回给调用者的结果,就是使用过函数得到了什么
2.如果获取返回值
变量名 = 函数名()
# 相当于先执行了这个函数,然后把结果赋予了这个变量
3.函数返回值的多种情况
3.1 函数里面没有写 return 关键字,则默认返回None
3.2 函数里面有 return ,但是后面没有跟任何东西,还是默认返回None
3.3 函数里面有 return 则后面写什么 返回什么
3.4.函数体代码有return并且后面有多个数据值 则自动组织成元组返回
3.5.函数体代码遇到return会立刻结束

参数的概念

形式参数
在函数定义阶段括号内填写的参数 简称'形参'
实际参数
在函数调用阶段括号内填写的参数 简称'实参'
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
"""
形参与实参的关系
形参类似于变量名 在函数定义阶段可以随便写 最好见名知意
def register(name,pwd):
pass 实参类似于数据值 在函数调用阶段与形参临时绑定 函数运行结束立刻断开
register('jason',123) 形参name与jason绑定 形参pwd与123绑定
"""

函数参数之位置参数

位置行数
在函数定义阶段 公式括号内从左往右依次填写的变量名就是位置行参
当在def 语句中 证明函数正在被定义,这就是位置行参
def func1(位置1,位置2,位置3):
pass
位置实参
在函数被调用阶段,我们在括号内从左往右依次填写的数据值
func1(数据1,数据2,数据3) def func1(name,password): #位置行参
print(name,password) func1('moon','123') #位置实参
#代码运行结果 moon 123 当调用函数后 行参 name 绑定实参 moon
#行参password 绑定 123 所以调用函数后执行函数代码块 输出 moon 123 错误传参
func1() # 报错,因为在定义函数时已设置需要收到2个传参还可以运行
func1('moon') # 报错 只传了一个参数不行,必须2个
func1('moon',12,1) # 报错 多传了一个参数 a = input('请输入姓名')
b = input('请输入密码')
func1(a,b) # 实参没有固定的定义 可以传数据 也可以传变量名等

函数参数之默认参数

什么是默认参数?
当我们在定义函数时,定义行参时也可以预留设置一个默认数据,当没有收到参数时则
默认这个数据为实参 def 函数名(行参名,行参名='默认数据'):
pass
def func1(name,age='18'):
print(name,age)
# 默认参数的定义也遵循短的简单的靠前 长的复杂的靠后 func1('moon') # 输出结果为 moon 18 我们只传了一个参数也可以使用该函数,
#因为该函数,默认了 age=18 如果你不给行参age 传送实参 则默认age行参的实参为18 func1('moon',22) #输出结果为 moon 22 当你对行参 age传送了实参,则预留默认数据不需要存在了,因为你已经给他数据值了 展示你给的数据即可 def func1(name='moon',age):
print(name,age)
# 报错 行参的顺序必须 遵循越简单越靠前的原则, 拥有默认数据的行参不可以在 普通行参的前面 #等同复杂度遵循从左到右原则
def func1(name='moon',age=12):
print(name,age)
正确,因为大家都是有默认数据的行参 同样的复杂等级。

函数参数之关键字参数

什么是关键字参数?
可以理解为我们在传参的时候 把数据指名道姓的给到行参
代码展示:
def func1(name,gender,age=18)
print(name,age,gender)
func1(gender='男',name='moon') # moon 18 男
# 这里就是指名道姓的 把 行参gender传送实参'男' 行参name传送实参'moon'然后age行参没有接收到数据 则启动默认数据 18
#凡是按照这种形式定义的实参,可以完全不按照从左到右的顺序定义,但仍能为指定的形参赋值 def func1(name,gender,age=18):
print(name,age,gender)
func1(gender='男','moon')
# 报错,在位置参与和关键字参数混合使用时也需要遵守 越简单的在前面处理的原则
# !!!!必须保证关键字参数在位置参数后面,!!!! def func1(name,gender,age=18):
print(name,age,gender)
func1(gender='男',name='moon',gender='女')
#报错 不可以对一个形参重复赋值

可变长度行参

1,什么是可变长度行参?
当我们在定义函数时 需要接受多个数据,或者我们不确认有多少个实际参数
形参名前加*号,调用函数时,溢出的位置实参,都会被接收,以元组的形式保存下来赋值给该形参
关键词
*args
用于接收溢出的
def func1(*args):
print(args)
func1(1,2,3,[212,22],{12:22})#(1, 2, 3, [212, 22], {12: 22})
#可以接受多个数据值,然后已元组的形式统一接收 然后赋值给*号后面的变量名 def func1(name,*arge):
print(name,arge)
func1(1,2,3,4)# 1 (2,3,4)
# 位置行参name 被 1所赋值,其他多余溢出的实参都被*整理为元组然后给了arge def func1(*arge,name):
print(name,arge)
func1(1,2,3,4)
#报错,实参全部都被*号吸收给了 arge 导致行参 name没有实际参数
func1(1,2,3,name='4') # (1,2,3)4
#成功,因为name行参被 关键词指定了实际参数 那前面就都被*号处理 2.可变长度的关键字参数
**kwargs
形参名前加**号,调用函数时,溢出位置的关键字参数都会被接收,以字典的形式保存下来赋值给该形参
def func1(*name, arge,**kwargs):
print(name, arge,kwargs)
func1(1, 2, 3, arge='4',name='moon',age='18')#(1, 2, 3) 4 {'name': 'moon', 'age': '18'}
# 首先 1,2,3,被*号接收赋值给了name变量 arge指定接收参数4,剩下的关键字参数都被**号接收,然后以字典的形式展示,健对展示。 def func1(**kwargs):
print(kwargs)
func1() # {}
func1(name = 'moon')# {name:moon} 接收关键字传参然后反馈以字典 健值形式 def func1(a,**kwargs):
print(a,kwargs)
func1(name='moon',age='18') #报错,必须按照从左到右顺利 先给位置行参a数据,

可变长度实参

1.可变长度实参
当我们在调用函数时 需要输出多个实参
*实参名
例如:
l1 = [11,22,33,44]
def func1(a,*args)
print(a,args)
func1(*l1) # 11,(22,33,44)
#当什么再实参中使用 *号,则会默认为对此变量进行循环,把每一个数据一次性传给所有行参
#当循环第一次,11,被赋予行参a,22,33,44均溢出被 args接收。
t1 = (33, 22, 11)
def func1(a,*args)
print(a,args)
func1(*t1) # 33 (22,11)
s1 = 'moon'
def func1(a,*args)
print(a,args)
func1(*s1) # m ('o','o','n')
se = {123,222,111}
def func1(a,*args)
print(a,args)
func1(*se) # 123 (222,111)
d1 ={'name'='moon','age'='18'}
def func1(a,*args)
print(a,args)
func1(*di) # name ('age',)
# 字典内数据只循环 健 不考虑值
!!当什么再实参中使用 *号,则会默认为对此变量进行循环,把每一个数据一次性传给所有行参!! 2.实参中如何使用字典传参值
def func1(name,age):
print(name,age)
d1 = {'name':'moon','age':'18'}
func1(**d1) # moon 18
# **可以把字典打散成关键字传参 实际运作func1(name='moon',age='18')
# *输出字典里的键
# **输出字典里的值 3.混合使用
def index(*args, **kwargs):
print(args) # (11, 22, 33, 44)
print(kwargs) # {}
index(11,22,33,44) !!所有参数可任意组合使用,但定义顺序必须是:位置参数、默认参数、*args、命名关键字参数、**kwargs!!

命名空间

1,什么是命名空间
命名空间就是系统自动设定了一部分内存空间 来存放 变量名和数据值绑定关系的地方。就是存变量名的地方,
2.命名空间的分类
2.1 内置空间
一些python中自带的方法,函数等。这些方法和函数的名字在你打开python的时候就已经在内置空间中存贮。
例如: print input len 等等
#当你打开python在其中时就可以使用这些名字来获得实际的效果 2.2全局名称空间
针对于当前python文件中设置的名字,存放文件级别的名字,文件执行时就会放置全局空间
例如: name = 'moon' # name 放置全局空间
if x==1:
a=2 # 如果if执行 a 放置全局空间 2.3局部名称空间
函数体代码内的名称,类体代码里的名称 都是局部名称空间
如果超过了这个函数或者类,就不可以使用了 3.存活周期
存活周期
内置名称空间
python解释器启动则创建 关闭则销毁
全局名称空间
py文件执行则创建 运行结束则销毁
局部名称空间
函数体代码运行创建 函数体代码结束则销毁(类暂且不考虑) 4.作用域
内置名称空间
解释器级别的全局有效
全局名称空间
py文件级别的全局有效
局部名称空间
函数体代码内有效

命名查找顺序

1.相互独立的局部名称空间默认不能够互相访问
def func1():
name = 'jason'
print(age) def func2():
age = 18
print(name) 2.2.局部名称空间嵌套
先从自己的局部名称空间查找 之后由内而外依次查找
"""
函数体代码中名字的查找顺序在函数定义阶段就已经固定死了
x = '你好阿'
def func1():
x = 1
def func2():
x = 2
def func3():
print(x) #2
func3()
func2() func1()
"""

小练习

判断下列money的值是多少并说明理由 思考如何修改而不是新增绑定关系
money = 100
def index():
money = 666
index()
print(money) # 100 定义函数时,函数内的代码不生效 money = 100
def func1():
money = 666
def func2():
money = 888
func2()
print(money) #100 因为函数func1()没有被执行,func2函数是在func1里的子代码

python中函数教程的更多相关文章

  1. Python中函数传递参数有四种形式

    Python中函数传递参数有四种形式 fun1(a,b,c) fun2(a=1,b=2,c=3) fun3(*args) fun4(**kargs) 四种中最常见是前两种,基本上一般点的教程都会涉及, ...

  2. python 中函数的参数

    一.python中的函数参数形式 python中函数一般有四种表现形式: 1.def function(arg1, arg2, arg3...) 这种是python中最常见的一中函数参数定义形式,函数 ...

  3. python 中函数参数传递形式

    python中函数参数的传递是通过赋值来传递的.函数参数的使用又有俩个方面值得注意:1.函数参数是如何定义的 2.在调用函数的过程中参数是如何被解析 先看第一个问题,在python中函数参数的定义主要 ...

  4. python中函数的参数解析

    python中函数的各种参数梳理: 1.形参:函数定义时传入的参数 2.实参:函数调用时传入的参数 (有形参必传实参,形参里自身特点可不传的,可传可不传) 3.缺省参数:不传为默认值,传了会覆盖(下面 ...

  5. (转)python中函数参数中如果带有默认参数list的特殊情况

    在python中函数参数中如果带有默认参数list遇到问题 先看一段代码 1 2 3 4 5 6 7 8 9 def f(x,l=[]):     for i in range(x):         ...

  6. 学以致用三十二-----python中函数的括号使用

    一直以来对python中函数括号的使用,有点分不清楚,到底什么时候用括号,什么时候不用括号,造成了很大看困惑. 今天来总结下. class aaa(): y = 'you' def __init__( ...

  7. python中函数的参数

    函数参数(一) 思考一个问题,如下: 现在需要定义一个函数,这个函数能够完成2个数的加法运算,并且把结果打印出来,该怎样设计?下面的代码可以吗?有什么缺陷吗? def add2num(): a = 1 ...

  8. python中函数的定义和详细的使用方法

    1. 函数的概念,函数是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集   2. 函数的作用,使用函数可以加强代码的复用性,提高程序编写的效率   3. 函数的使用,函数必须先创建才 ...

  9. Python中函数的参数传递与可变长参数

    转自旭东的博客原文 Python中函数的参数传递与可变长参数 Python中传递参数有以下几种类型: (1)像C++一样的默认缺省函数 (2)根据参数名传参数 (3)可变长度参数 示例如下: (1)默 ...

  10. python中函数参数传递的几种方法

    转自  http://www.douban.com/note/13413855/ Python中函数参数的传递是通过“赋值”来传递的.但这条规则只回答了函数参数传递的“战略问题”,并没有回答“战术问题 ...

随机推荐

  1. kubernetes1.20 部署 traefik2.3

    一.概述 Traefik 是一个开源的可以使服务发布变得轻松有趣的边缘路由器.它负责接收你系统的请求,然后使用合适的组件来对这些请求进行处理. 除了众多的功能之外,Traefik 的与众不同之处还在于 ...

  2. linux系统下查看某个进程内存使用量

  3. core-js/modules/es.error.cause.js 报错

    解决方法: 1.先删除 node_modules 依赖 npm rm -rf node_modules 2.首先安装 报错的插件 npm install --save core-js 3.最后再 np ...

  4. 【C++】从零开始的CS:GO逆向分析2——配置GLFW+IMGUI环境并创建透明窗口

    [C++]从零开始的CS:GO逆向分析2--配置GLFW+IMGUI环境并创建透明窗口   使用的环境:Visual Studio 2017,创建一个控制台程序作为工程文件 1.配置glfw 在git ...

  5. 多云容器编排 Karmada-Operator 实践

    作者:vivo 互联网服务器团队-Zhang Rong Karmada作为开源的云原生多云容器编排项目,吸引了众多企业共同参与项目开发,并运行于生产环境中.同时多云也逐步成为数据中心建设的基础架构,多 ...

  6. H5与APP的交互框架(WebViewJavascriptBridge)

    基本原理是: 把 OC 的方法注册到桥梁中,让 JS 去调用. 把 JS 的方法注册在桥梁中,让 OC 去调用.(注册自己,调用它人.) WebViewJavaScriptBridge 使用的基本步骤 ...

  7. 通过 Github Action 实现定时推送天气预报

    偶然间,看到 GitHub Actions 教程:定时发送天气邮件 - 阮一峰的网络日志 这篇文章,没错,这个正好能打发自己的折腾之心,也能通过代码给生活引入一些变化. 还是在这里简单记录一下实现过程 ...

  8. 学生管理系统(C语言简单实现)

    仅供借鉴.仅供借鉴.仅供借鉴(整理了一下大一C语言每个章节的练习题.没得题目.只有程序了) 文章目录 1 .实训名称 2.实训目的及要求 3. 源码 4.实验小结 1 .实训名称 实训12:文件 2. ...

  9. 44.drf缓存

    DRF原有缓存 Django缓存.配置:https://www.cnblogs.com/Mickey-7/p/15792083.html   Django为基于类的视图提供了一个 method_dec ...

  10. 更改DataFrame列顺序

    使用pandas进行数据分析的时候,有时会由于各种需求添加了一些列.可是列的顺序并不能符合自己的期望.这个时候就需要对于列的顺序进行调整. import numpy as np import pand ...