热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

10函数基础和进阶

#函数##01函数基础###1.定义函数和调用def函数名([输入参数]):函数体defsay_hi():print(你好)print(很高兴认识你)return小姐姐

image

#函数
##01函数基础
###1.定义函数和调用
def 函数名([输入参数]):
函数体

def say_hi():print("你好")print("很高兴认识你")return "小姐姐","萝莉","御姐"
girl = say_hi()
print(girl)

image
注意:1.return 返回的是元组(tuple),返回给调用者。2.函数执行遇到return不会继续向下执行 3.如果return什么都不写,返回的结果就是None

函数的调用:函数名()就可以调用函数
###2.函数的参数
函数()内的就是参数
####参数的分类
1.形参:写在函数声明的位置的变量叫形参,形式上是一个完整的,表示这个函数需要的具体内容 2.实参:在函数调用时给函数传递的值,实际执行的时候给函数传递的信息,表示给函数具体的内容 3.传参:给函数传递信息的时候将实际参数交给形式参数的过程叫做传参
位置参数
def eat(chat,addr,age): # 三个形参 聊天工具 地址 年龄 print("拿出手机") print("打开" + chat) print(str(age) + "岁的"+ "小姐姐") print("要不要一起去" + addr + "吃饭") eat("微信","青岛",18) # 实参

三元运算符

c = a if a > b else b # 当a > b赋值给c 否则就把b赋值给creturn c
print(f(1,9)) # 9

关键字传参

print("拿出手机")print("打开" + chat)print(str(age) + "岁的"+ "小姐姐")print("要不要一起去" + addr + "吃饭")
eat(chat = "微信",addr = "青岛",age = 18) # 实参

混合参数

print("拿出手机")print("打开" + chat)print(str(age) + "岁的"+ "小姐姐")print("要不要一起去" + addr + "吃饭")
eat("微信",addr = "上海",age = 18)

关键字参数后面只能是关键字参数,位置参数必须放在关键字参数的前面

默认值参数

def stu_info(name,age,sex = "男"): # 学生信息 默认参数必须写在最后面print(name,age,sex)return sex,"录入完毕"
a = stu_info("张强","18")
print(a)

动态接收关键字参数
在参数位置用*表示接受任意参数

打包(成元组,字典或者列表)和解包(拆解成单个元素)
**用于字典的打包和解拆 用于元组和列表的打包和解包(非关键字参数传参)

def tuple_pack(a,*b):print(a)print(b)
tuple_pack(1,2,3) # 1 (2, 3)

def dict_pack(a,**b): # 只能用关键字传参print(a)print(b)
# dict_pack(1,2,3) # 报错
dict_pack(1,one = 1,two = 2,three = 3) # 1 {'one': 1, 'two': 2, 'three': 3}def tuple_dict_pack(a,*b,**c):print(a)print(b)print(c)
tuple_dict_pack(1,2,3,one = 1,two = 2,three = 3) #1 (2, 3) {'one': 1, 'two': 2, 'three': 3}#拆解
def tuple_dict_unpack(*a,**b):print(a)print(b)
ee = (1,2,3)
ff = {"one":1,"two":2,"three":3}
tuple_dict_unpack(*ee,**ff) # (1, 2, 3) {'one': 1, 'two': 2, 'three': 3}

02函数进阶

###1.动态接收位置参数

def eat(*a):# 在定义函数时用打包print("我想吃",a)print(*a) # 在函数体内用解包
eat("米饭","中米饭")def eat(a,b,*c):print("我想吃",a,b,c)print(*c)
eat("大米饭","小米饭","米饭") # 我想吃 大米饭 小米饭 ('米饭',) 米饭

###默认值参数

def eat(a,b,*c,d = "白菜"): # 默认值参数必须放最后面 否则会被覆盖
# print("我想吃",a,b,c,d)
# print(*c)
# eat("大米饭","小米饭","米饭")
# 形参的顺序 位置参数 动态参数 默认参数
# 位置参数 > args(动态位置参数) > 默认值参数 > kwargs(动态关键字参数)

动态接收关键字参数

def fun(**a):print(a)
fun(a = 1,b = 2) # {'a': 1, 'b': 2}def func(a,b,c,d):print(a,b,c,d)
func(1,2,c = 3,d = 6) # 1 2 3 6

###想要接收所有的参数

def func(*args,**kwargs):print(args,kwargs)
func(1,23,4,a = 1,b = 2) # (1, 23, 4) {'a': 1, 'b': 2}

###动态参数的传参

# 方法一
lst = [1,4,7]
def func(*args):print(args)
func(lst[0],lst[1],lst[2]) # (1, 4, 7)# 方法二
def func(*args):print(args)
func(*lst) # (1, 4, 7) # 在实参的位置上用*将lst(可迭代对象) 在形参的位置上用*把收到的参数组合成一个元组# 字典也可以打散 用**
dic = {"a":1,"b":2}
def fun(**kwargs):print(kwargs)
fun(**dic) # {'a': 1, 'b': 2}

###函数的注释
def eat(food,drink):
“”"
这里描述当前函数式用来干什么的
:param food: food这个参数是什么意思,用来接收什么?食物
:param drink:
:return: 函数执行完返回给调用者的具体的内容
“”"
print(food,drink)
return “星期三”
print(eat(“麻辣汤”,“coco”)) # 麻辣汤 coco 星期三

在外部查看函数内注释
print(eat.doc)

###名称空间
def fun():
a = 10
print(a)
fun() # 10
命名空间 存放名字和值的关系的空间
分类:
全局命名空间:我们直接在python文件中,函数外声明的变量
局部命名空间:在函数中声明的变量
内置命名空间:存放python解释器为我们提供的名字 list(),tuple(),str,int,这些都是内置命名空间 关键字不是
import keyword
print(keyword.kwlist) [‘False’, ‘None’, ‘True’, ‘and’, ‘as’, ‘assert’, ‘async’, ‘await’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘finally’, ‘for’, ‘from’, ‘global’, ‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’, ‘nonlocal’, ‘not’, ‘or’, ‘pass’, ‘raise’, ‘return’, ‘try’, ‘while’, ‘with’, ‘yield’]
import builtins # 内置函数
print(dir(builtins))

加载顺序:内置命名空间———>全局命名空间————>局部命名空间
取值顺序:局部命名空间数值————>全局————>内置
a = 10
def func():
a = 20
print(a)
func() 20 先去20后取10


作用域:作用范围,按照生效范围分为 全局作用域和局部作用域

#全局作用域:包括内置命名空间和全局作用空间,在整个文件的任何位置都可以使用(遵循从上到下逐行执行)
#局部作用域:在函数内部执行

作用域命名空间
全局作用用域:全局命名空间+内置命名空间
局部作用用域:局部命名空间

a = 10
def func():a = 40b = 20print("哈哈")print(a,b)print(globals()) # 打印全局作用用域中的内容print(locals()) # {'a': 40, 'b': 20}
func()

###函数嵌套
只要遇到了()就是函数的调用,如果没有就不是调用

def func1():print(111)
def func2():print(222)func1()def func3():print(666)print(444)func3()print(8888)
func2()# global 全局声明变量 global宗旨:在函数内部修改全局的变量,如果全局不存在就创建一个变量
# lst = ["马化腾","刘嘉玲","詹姆斯"]
# def func():
# lst.append("马云")
# # 对于可变数据类型可以直接进行访问
# func()
# print(lst)# nonlocal 非局部声明变量 宗旨:只修改上一层变量,如果上一层没有变量就再往上找一层,只会找到函数的最外层,不会找到全局进行修改
# a = 10
# def func1():
# a = 20
# def func2():
# nonlocal a #改了a = 20
# a = 30
# print(a)
# func2()
# print(a)
# func1() # 加nonlocal 结果为30 30 不加结果为30 20

a = 1
def fun1():a = 2def fun2():nonlocal aa = 3def fun3():a = 4print(a)print(a)fun3()print(a)print(a)fun2()print(a)
print(a)
fun1()
print(a)![image](https://img2022.cnblogs.com/blog/2787076/202204/2787076-20220420233309968-1881174593.jpg)

推荐阅读
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 本文介绍了Java中Hashtable的clear()方法,该方法用于清除和移除指定Hashtable中的所有键。通过示例程序演示了clear()方法的使用。 ... [详细]
  • Windows7企业版怎样存储安全新功能详解
    本文介绍了电脑公司发布的GHOST WIN7 SP1 X64 通用特别版 V2019.12,软件大小为5.71 GB,支持简体中文,属于国产软件,免费使用。文章还提到了用户评分和软件分类为Win7系统,运行环境为Windows。同时,文章还介绍了平台检测结果,无插件,通过了360、腾讯、金山和瑞星的检测。此外,文章还提到了本地下载文件大小为5.71 GB,需要先下载高速下载器才能进行高速下载。最后,文章详细解释了Windows7企业版的存储安全新功能。 ... [详细]
  • 校园表白墙微信小程序,校园小情书、告白墙、论坛,大学表白墙搭建教程
    小程序的名字必须和你微信注册的名称一模一样在后台注册好小程序。mp.wx-union.cn后台域名https。mp.wx-union.cn ... [详细]
  • win10清理电脑垃圾 ... [详细]
  • vue使用
    关键词: ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 无损压缩算法专题——LZSS算法实现
    本文介绍了基于无损压缩算法专题的LZSS算法实现。通过Python和C两种语言的代码实现了对任意文件的压缩和解压功能。详细介绍了LZSS算法的原理和实现过程,以及代码中的注释。 ... [详细]
author-avatar
mark0003
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有