一、函数

1、什么是函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

作用:

​ 函数能提高应用的模块性,和代码的重复利用率。

2、函数的语法结构

def 函数名(参数):
'''函数注释'''
函数体代码
return 返回值
1.def
定义函数的关键字
2.函数名
等同于变量名
3.参数
可以不填,主要是在使用函数的时候规定外界要不要传数据进来
4.函数注释
类似于说明书,用来介绍这段函数体的使用说明
5.函数体代码
是整段函数的核心,主要取决于程序员的编写
6.return
使用函数之后可以返回数据给使用者,可以不填

3、函数的定义与调用

1.函数在定义阶段只检测语法,不执行代码
def func():
pass
2.函数在调用阶段才会执行函数体代码
func()
3.函数必须先定义,后调用
4.函数的调用使用:函数名()
如有参数需要在括号内按相应的规则填写

4、函数的分类

1.空函数
函数体代码为空,主要用于先创建一个框架,函数体用pass补全
def register():
"""注册功能"""
pass
2.无参函数
函数名后方括号内无需填写参数
def index():
print('from index function')
3.有参函数
函数名后方括号内需要填写参数才可以调用
def func(a):
print(a)

5、函数的返回值

1.什么是返回值
调用函数之后返回给调用者的结果
2.如何获取返回值
# 变量名 赋值符号 函数的调用
res = func() # 先调用函数,然后用变量名接收结果
3.返回值的多种结果
1.函数体代码中没有return时,默认返回None
2.函数体代码中有return时,后面没写数据,返回None
3.函数体代码中有ruturn时,返回后面写的值
4.函数体代码中有return时,后面写多个数据,以元组的形式返回
我们以list形式写的值就会以列表返回,否则默认以元组形式返回
5.函数体代码遇到retrun会自动结束函数体代码

6、函数的参数

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

二、函数参数

引言:

​ 函数的参数主要是在使用函数的时候规定外界要不要传数据进来

​ 参数分为两种:

​ 1、形参

​ 2、实参

​ 而形参和实参又共分为以下几个种类

1、位置参数

1.位置形参:
在函数定义阶段括号内从左往右依次填写的变量名
def func(a, b, c):pass 2.位置实参:
在函数调用阶段括号内从左往右依次填写的数据值
func(1, 2, 3)
'''
定义:
1、在调用时,形参和实参位置必须一致
2、在调用时,形参和实参数量必须一致
3、在调用时可用关键字传参
3.1.关键字传参需要跟在位置传参的后面
4、同一个形参在调用时不能多次赋值
5、实参可以传递绑定数据值的变量名
'''

案例一:在下面这个函数中, a 必选参数,是必须要指定的

>>> def demo_func(a):
... print(a)
...
>>> demo_func(10)
10
>>> demo_func() # 不指定会报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: demo_func() missing 1 required positional argument: 'a'

案例二:在下面这个函数中, name age 都是必选参数,在调用指定参数时,如果不使用关键字参数方式传参,需要注意顺序

>>> def print_profile(name, age):
... return f"我的名字叫{name},今年{age}岁了"
...
>>> print_profile("kangkang", 18)
'我的名字叫kangkang,今年18岁了'

如果参数太多,你不想太花精力去注意顺序,可以使用关键字参数方式传参,在指定参数时附上参数名,比如这样:

>>> print_profile(age=18, name="kangkang")
'我的名字叫kangkang,今年18岁了'

2、默认参数

1.默认形参
在函数定义阶段,可填写默认值
def func(name, age = '18')
2.默认实参
在调用阶段,默认值不需要修改时可以不用传参,结果为默认值
def func('kangkang') '''
定义:
默认参数必须放在位置参数的后面,否则程序会报错
'''

案例一:在下面这个函数中,b 是可选参数(默认参数),可以指定也可以不指定,不指定的话,默认为10

>>> def demo_func(b=10):
... print(b)
...
>>> demo_func(20)
20
>>> demo_func()
10

案例二:在定义时,必选参数一定要在可选参数的前面,不然运行时会报错

>>> def demo_func(a=1, b):
... print(a, b)
...
File "<stdin>", line 1
SyntaxError: non-default argument follows default argument
>>>
>>> def demo_func(a, b=1):
... print(a, b)
...
>>>

3、可变长参数

1、一个*号

1.可变长形参 *  (一个*号)
在函数定义阶段,括号内的参数可接收多余位置实参,*后的参数名约定俗成为args
def num (x,y,*args):
print(args)
return 1
num(1,2,3,4,5)
----------------------------------------------------------
(3, 4, 5) *args就为(3,4,5),1,2分别传给了x,y 2.可变长实参 * (一个*号)
在函数调用阶段,*可接收各类数据库并循环进行传参
def func(x, y, z, *args):
print(x, y, z, args)
func(1, *(1, 2), 3, 4)
----------------------------------------------------------
1 1 2 (3, 4) '''
须知:
1.字符串 # 按字符顺序依次传参
2.列表 # 按列表数据值顺序依次传参
3.集合 # 集合无序,数据值传参顺序随机
4.元组 # 按元组数据值顺序依次传参
5.字典 # 只能传参字典K值
'''

案例一:在下面这个函数中,args 参数和上面的参数名不太一样,在它前面有一个 *,这就表明了它是一个可变参数,可以接收任意个数的不指定参数名的参数。

>>> def demo_func(*args):
... print(args)
...
>>>
>>> demo_func(10, 20, 30)
(10, 20, 30)

案例二:可变位置参数可以放在必选参数前面,但是在调用时,必选参数必须要指定参数名来传入,否则会报错

>>> def demo_func(*args, b):
... print(args)
... print(b)
...
>>> demo_func(1, 2, 100)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: demo_func() missing 1 required keyword-only argument: 'b'
>>>
>>> demo_func(1, 2, b=100)
(1, 2)
100

2、两个*号

1.可变长形参 **  (两个*号)
会将溢出的关键字实参,储存成字典的形式,然后赋值给**号后的形参,**号后参数约定俗成,称为kwargs
def func(**kwargw):
print(kwargw) func(a=5)
----------------------------------------------------------
{'a': 5} 2.可变长实参 ** (两个*号)
将字典打散成关键字参数的形式传递给形参
def func(name, age, hobby):
print(name, age, hobby) dict_user_name = {'name': 'kangkang', 'age': 18, 'hobby': 'ball'}
func(**dict_user_name)
----------------------------------------------------------
kangkang 18 ball

案例二:在下面这个函数中,kw 参数和上面的 *args 还多了一个 * ,总共两个 ** ,这个意思是kw 是一个可变关键字参数,可以接收任意个数的带参数名的参数。

>>> def demo_func(**kw):
... print(kw)
...
>>> demo_func(a=10, b=20, c=30)
{'a': 10, 'b': 20, 'c': 30}

案例三:可变关键字参数则不一样,可变关键字参数一定得放在最后,下面三个示例中,不管关键字参数后面接位置参数,还是默认参数,还是可变参数,都会报错。

>>> def demo_func(**kw, a):
File "<stdin>", line 1
def demo_func(**kw, a):
^
SyntaxError: invalid syntax
>>>
>>> def demo_func(**kw, a=1):
File "<stdin>", line 1
def demo_func(**kw, a=1):
^
SyntaxError: invalid syntax
>>>
>>> def demo_func(**kw, *args):
File "<stdin>", line 1
def demo_func(**kw, *args):
^
SyntaxError: invalid syntax

3、*args和**kwargs一起使用


def num(x, y, f=0, *args, **kwargs):
print(f)
print(args)
print(kwargs)
return 1 num(1, 2, 6, 7, 8, j=3, n=4, q=5)
---------------------------------------------------------------------------
6
(7, 8)
{'j': 3, 'n': 4, 'q': 5}

案例一:在定义时,可变位置参数一定要在可变关键字参数前面,不然运行时也会报错

>>> def demo_func(**kw, *args):
File "<stdin>", line 1
def demo_func(**kw, *args):
^
SyntaxError: invalid syntax
>>>
>>> def demo_func(*args, **kw):
... print(args, kw)

三、名称空间

​ 引言:

​ 名称空间就是python用来储存名称的空间(可以简单理解为储存变量名的空间)

​ 名称空间可分为以下三种,并且各自拥有不同的作用

1、名称空间的类型、作用及存活时间

  • 内置名称空间

    • 作用:用来储存python解释器内置方法名的空间
    • 作用域:python解释器
    • 存活周期:解释器开启则产生,关闭则销毁
  • 全局名称空间
    • 作用:用来储存py文件内变量名的空间
    • 作用域:单个py文件
    • 存活周期:单个py文件打开时产生,关闭则销毁
  • 局部名称空间
    • 作用:用来储存函数体代码内变量名的内存空间
    • 作用域:函数体代码、类别体代码
    • 存活周期:函数体、类别体代码运行时产生,运行完毕销毁

2、名字的查找顺序

​ 首先,在查找前,我们需要分请名字所在的域

​ python运行代码时由外部代码向内运行,而名字则是由内向外查找:

  • 局部内存空间

​ 局部内存空间>>>全局内存空间>>>内置内存空间

  • 全局空间

​ 全局内存空间>>>内置内存空间

​ 且要符合以下几点要求:

​ 1、在局部内存空间嵌套,由子代码向父代码中查找

​ 2、相互独立的代码体默认无权互相访问

Python基础之函数:1、函数的介绍及名称空间的更多相关文章

  1. 十六. Python基础(16)--内置函数-2

    十六. Python基础(16)--内置函数-2 1 ● 内置函数format() Convert a value to a "formatted" representation. ...

  2. 十五. Python基础(15)--内置函数-1

    十五. Python基础(15)--内置函数-1 1 ● eval(), exec(), compile() 执行字符串数据类型的python代码 检测#import os 'import' in c ...

  3. Python基础(7)--函数

    本篇文章将介绍如何将语句组织成函数,以及参数概念以及在程序中的用途 本文地址:http://www.cnblogs.com/archimedes/p/python-function.html,转载请注 ...

  4. Python基础:内置函数

    本文基于Python 3.6.5的标准库文档编写,罗列了英文文档中介绍的所有内建函数,并对其用法进行了简要介绍. 下图来自Python官网:展示了所有的内置函数,共计68个(14*4+12),大家可以 ...

  5. Python基础篇(三)_函数及代码复用

    Python基础篇_函数及代码复用 函数的定义.使用: 函数的定义:通过保留字def实现. 定义形式:def <函数名>(<参数列表>): <函数体> return ...

  6. python基础知识-day6(函数知识)

    1.函数的特点 函数式的编程范式 面向对象的编程范式 所谓函数,就是把重复的代码单独的分离出来,放在一个公共的地方,以后可以一只调用,这样就可以解决多次重复来编写. 2.函数的定义 1 def fun ...

  7. Python基础之set与函数

    set集合 set 是无序,不重复的序列,基本功能包括去重和关系测试,集合中没有插入的方法,只能添加. 集合对象还支持union(联合), intersection(交), difference(差) ...

  8. python基础(内置函数+文件操作+lambda)

    一.内置函数 注:查看详细猛击这里 常用内置函数代码说明: # abs绝对值 # i = abs(-123) # print(i) #返回123,绝对值 # #all,循环参数,如果每个元素为真,那么 ...

  9. Python基础(五)-函数

    函数: 1.定义与使用: def 函数名(参数): "函数_文档字符串" 函数体 ... return [表达式] ## def:表示函数的关键字 函数名:函数名称,根据函数名调用 ...

随机推荐

  1. Flutter 检测报错 Unable to locate Android SDK.

    安装好 Flutter SDK 之后,官方建议使用flutter doctor检查 Flutter SDK 的相关配置信息. 如果 Android Studio 安装 Android SDK 的时候选 ...

  2. docker 容器terminal失败

    关键一句话:docker 容器的teminal失败,一定是等待资源导致的,不管是pid资源,还是内存资源.本文主要讲因为内存资源导致进程D状态,然后导致teminal容器失败. 目前在集群中,cpu占 ...

  3. 从零开始Blazor Server(15)--总结

    我们用了14篇文章,基本上把一个后台管理系统需要的UI部分都说的差不多了.所以这套文章也该到了结束的时候了. 这里面有很多问题,比如我们直接使用UI来拉数据库信息而没有使用service,再比如我们大 ...

  4. 【MIDO】乐理基础 与 python - 从零开始到编写柱式和弦与分解和弦

    本篇文章从律学开始,从十二平均律出发,介绍一些基础必要的乐理知识,然后编写python文件,输出和弦音频文件. 乐理知识部分: 一.律学简述(temperament)   1.概论   律学,又称&q ...

  5. HCNP Routing&Switching之DHCP安全

    前文我们了解了MAC地址防漂移技术,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16632239.html:今天我们来了解下DHCP安全相关话题: 回顾DHC ...

  6. 搭建docker镜像仓库(二):使用harbor搭建本地镜像仓库

    目录 一.系统环境 二.前言 三.Harbor 四.使用harbor搭建私有镜像仓库 4.1 环境介绍 4.2 k8smaster节点安装配置harbor 4.2.1 安装harbor离线包 4.2. ...

  7. 操作系统学习笔记10 | I/O、显示器与键盘

    从这一部分开始介绍操作系统的设备驱动,操作系统通过文件系统的抽象驱动设备让用户能够使用显示器.键盘等交互工具.并讲解printf和scanf是如何实现敲下键盘将字符显示到屏幕上的. 参考资料: 课程: ...

  8. Taurus.MVC 微服务框架 入门开发教程:项目集成:6、微服务间的调用方式:Rpc.StartTaskAsync。

    系统目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...

  9. Windows Server体验之安装

    微软在Windows Server家族中有一个新的家族,名字就是Windows Server.这个按半年频道更新的版本目前是1903和Windows 10的命名方式一样.这个产品就是以前的服务器核心安 ...

  10. 基于.NET6的简单三层管理系统

    前言 笔者前段时间搬砖的时候,有了一个偷懒的想法:如果开发的时候,简单的CURD可以由代码生成器完成,相应的实体.服务都不需要再做额外的注册,这样开发人员可以省了很多事. 于是就开了这个项目,期望实现 ...