初学python之路-day11
一、函数的参数:实参与形参
# 参数介绍: # 函数为什么要有参数:因为内部的函数体需要外部的数据 # 怎么定义函数的参数:在定义函数阶段,函数名后面()中来定义函数的参数 # 怎么使用函数的参数:在函数体中用定义的参数名直接使用 # 实参:有实际意义的参数 # -- 在函数调用的时候,()中传入的参数 # 形参:参数本身没有意义,有实参赋予形参值后,该形参就具备了意义 # 补充:有默认值的形参,在没有被实参赋值,具备的是自身意义,但一旦被实参赋值,意义同实参 - def add(n1, n2=2): # -- 在定义函数的时候,()中出现的参数
# 形参范畴 def add(n1, n2): # 形参n1,n2在没有被实参赋值时,没有实际意义,被什么意义的实参赋值,就被赋予了什么意义 return n1 + n2 # 实参范畴 print(add('a', 'b')) # 实际的字符串 print(add(10, 20)) # 实际的数字 a = 200 b = 300 print(add(a, b)) # 存放实际数字的变量
二、形参是对实参的值拷贝
# 形参与实参可以重名,但是代表的是两个不同的变量 # 不可变类型,形参发生重指向,实参不变 def fn(num): num = 20 num = 10 fn(num) # 可变类型,形参发生值的内部变化,实参变,两个指向的是同一个地址 def func(ls): print('1>>>:', ls) # [10] ls.append(20) print('2>>>:', ls) # [10, 20] ls = [10] func(ls) print('3>>>:', ls) # [10, 20]
三、实参的分类:1.位置实参;2.关键词实参
def fn(a, b): print(a, b) # 1)拿实际值进行传参 fn(10, 20) # 10 => a | 20 => b # 2)拿位置实参进行传参:形参与实参进行位置一一对应,eg:一号为的实参一定传给一号位的形参 a = 100 b = 200 fn(a, b) # a:100 => a | b:200 => b fn(b, a) # b:200 => a | a:100 => b # 3)拿关键字实参进行传参:指名道姓进行传参 - 传参的过程过指名道姓形参 # 明确:形参名目前为a和b fn(a=1000, b=2000) # a:1000 => a | b:2000 => b fn(b=2000, a=1000) # b:2000 => b | a:1000 => a a = 666 b = 888 # 前面的是形参名,后面的是传递的实参名 fn(a=a, b=b) # a:666 => a | b:888 => b # 位置实参:一定按照位置,且个数要一一对应进行传参 # 关键字实参:指名道姓进行传参,个数一致位置可以改变进行传参 # 实参组合传参规则:必须先传位置实参,再传关键字实参
四、形参的分类
# 六大分类: # 1.无值位置形参(位置形参):可以被位置与关键字实参进行传参,必须传值 # 2.有值位置形参(默认形参):可以被位置与关键字实参进行传参,可以不用传参采用默认值 # 3.可变长位置形参:可以接受前两个没有接收完位置实参,接收的个数可以为0~n个,0个是就是空元组 # 4.无值关键字形参:只能由关键字实参进行传参,必须传值 # 5.有值关键字形参:只能由关键字实参进行传参,可以不用传参采用默认值 # 6.可变长关键字形参:接收4,5没有接收完的关键字实参,接收的个数可以为0~n个,0个是就是空字典
# 声明顺序: # 位置形参:a -> 默认形参:b -> 可变长位置形参:args -> 有无默认值关键字形参:cde -> 可变长关键字形参:kwargs def fn(a, b=10, *args, c, d=20, e, **kwargs): pass # 注意点: # 1.可变长位置形参只能接受位置实参,要想被附上值,前面的有值位置形参的默认值没有多大意义 # 2.args与kwargs是可变长形参的变量名,所以可以自定义,但约定俗成就用它俩
# 常出现的组合 def f1(*args, **kwargs): pass def f2(a, b=10, **kwargs): pass def f3(a, *args, **kwargs): pass def f4(a, *, x, **kwargs): pass def f5(a, *args, x, **kwargs): pass # 使用法则: # 1.所有位置形参全部采用位置实参进行传值 # 2.所有关键字形参全部采用关键字实参进行传值 # 3.不管位置还是关键字形参,全部按照顺序进行传参
五、打散机制
def fn(*args, **kwargs): print(args) print(kwargs) t = (1, 2, 3) dic = {'a': 100, 'b': 200, 'c': 300} # *单列容器 会打散单列容器 # **双列容器 会打散双列容器 fn(1, 2, 3, a=100, b=200, c=300) # (1, 2, 3) {'a': 100, 'b': 200, 'c': 300} fn(*t, **dic) # (1, 2, 3) {'a': 100, 'b': 200, 'c': 300} fn(*(1, 2, 3), **{'a': 100, 'b': 200, 'c': 300}) # (1, 2, 3) {'a': 100, 'b': 200, 'c': 300} # 字符串也可以被打散 fn(*'abc') # ('a', 'b', 'c') {} print(*'abc') # a b c
初学python之路-day11的更多相关文章
- python之路-Day11
引子 到目前为止,我们已经学了网络并发编程的2个套路, 多进程,多线程,这哥俩的优势和劣势都非常的明显,我们一起来回顾下 协程 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程: ...
- 初学python之路-day12
本篇补上字符串的比较:按照从左往右比较每一个字符,通过字符对应的ascii进行比较 一.函数默认值的细节 # 如果函数的默认参数的默认值为变量,在所属函数定义阶段一执行就被确定为当时变量存放的值 a ...
- 初学python之路-day10
基础部分先告一段落,今天开始学习函数. 一.函数:完成 特定 功能的代码块,作为一个整体,对其进行特定的命名,该名字就代表函数 -- 现实中:很多问题要通过一些工具进行处理 => ...
- 初学python之路-day08前期总结
# 1# 计算机原理:控制器 运算器 存储器 input设备 output设备 IO流# 三大核心:CPU 内存 硬盘 # 内存分布:栈区 与 堆区# 如二进制与十进制的转换,如1111转成十进制为1 ...
- 初学python之路-day08
#学习了编码后,还要了解三种字符串.# 一.# 普通字符串:u''以字符作为输出单位,# print(u'abc') # 用于显示abc# # 二进制字符串:b'' 二进制字符串以字节作为输出单位# ...
- 初学python之路-day07-字符编码
今天的博客主要关于字符编码,并对前几天学习的数据类型做些总结. 学习字符编码的目的:解决乱码问题. 应用程序打开文本文件的三步骤 1.打开应用程序 2.将数据加载到内存中 3.cpu将内存中的数 ...
- 初学python之路-day04
每天一篇总结,今天学习的是有关于流程控制的知识. 流程控制,顾名思义,在计算机运行中,程序是被某种控制方式按照某种流程或者规律来执行的.而python程序的运行,肯定也是按照某种规律在执行.这些规律可 ...
- 初学python之路-day03
我在前面的文章提到了变量的概念,这里详细介绍下变量的命名.变量名,只能是字母.数字及下划线 "_" 任意组成,而且不能以数字开头.在命名变量时,尽量避免与系统关键词重名,如:'an ...
- 初学python之路-day02
python,诞生于1989年的圣诞,Guido van Rossum为了打发无聊,因此发明了python,并且开放了其源代码,使得这门语言在随后的几十年的发展的越来越广.现今,2.x版本已经在2.7 ...
随机推荐
- 数据结构排序算法插入排序Java实现
public class InsertDemo { public static void main(String args[]) { int[] sort ={4,2,1,3,6,5,9,8,10,7 ...
- centos7之zabbix简单检查之端口监控
1.创建模板 模板名字可以随便起 2.重点在监控项和触发器上. 3.比如我们创建一个监控25端口号的监控项 net.tcp.service[tcp,,25] 这个选项不是手动写上去的,是需要点击选择. ...
- vue实现懒加载
- 【转载】利用window.performance.timing进行性能分析
利用window.performance.timing进行性能分析 性能分析... window.performance.timing中相关属性语义: // .navigationStart 准备 ...
- commons-httpclient 实现get和post请求
引入的jar包为: <!-- https://mvnrepository.com/artifact/commons-httpclient/commons-httpclient --> &l ...
- 2019年11个javascript机器学习库
Credits: aijs.rocks 虽然python或r编程语言有一个相对容易的学习曲线,但是Web开发人员更喜欢在他们舒适的javascript区域内做事情.目前来看,node.js已经开始向每 ...
- torch.view()详解及-1参数是什么意思
经常可以看到调用torch.view(-1,28*28)之类的调用,那么这里的-1是什么意思呢,经过查看文档view()得到了一下结果: view()返回的数据和传入的tensor一样,只是形状不同 ...
- [openssh-server]install and enable ssh in debian9 / 在debian9上安装并启用ssh
新安装的debian9.8 with XFCE 发现没有ssh,下载debian-9.8.0-amd64-DVD-1.iso并挂在到ESXi虚拟机/media/cdrom0. 清空或保存/etc/ap ...
- 洛谷P5155 [USACO18DEC]Balance Beam(期望,凸包)
你以为它是一个期望dp,其实它是一个凸包哒! 设平衡木长度为\(L\),把向右走平衡木那个式子写一下: \[dp[i]=\frac{dp[i+1]+dp[i-1]}{2}\] 然后会发现这是一个等差数 ...
- 超越村后端开发(4:API开发)
1.users相关的api开发 1.在settings中添加APPID,SECRET 2.在apps/users/views.py内: from chaoyuecun.settings import ...