python第十一天
今日内容
1. 函数的参数
2. 函数对象 -- 函数名 * * * *重点!
3. 函数 的嵌套调用
1. 形参与实参:
函数介绍:
1.1 函数为什么要有参数: 因为内部的函数体需要外部的数据
1.2 怎么定义函数的参数,在定义函数阶段,函数名后面()中来定义函数的参数
1.3 怎么使用函数的参数,在函数体中用定义的参数名直接使用
1.4 实参: 有实际意义的参数
-----在函数调用的时候,从 () 中传入的参数
1.5 形参: 参数本身没有意义,有了实参赋予参数后,该形参就具备了意义
-----补充:有默认值的形参,在没有被实参赋值,具备的就是自身的意义,返回的是默认值,但是一旦被实参赋值,它的意义就等同与实参
1.6 形参范围:def add (n1, n2):# 形参n1 ,n2 在没有被实参赋值时,没有实际意义,被实参所赋值,就被赋予了实参的意义
return n1 + n2
1.7 实参范围:
print(add('a','b')) # 实际的字符串
print(add(10,20)) # 实际的数字
a = 100
b = 200
print(add(a,b)) # 存放实际数字的变量
2. 形参是对实参的值拷贝
2.1 形参与实参可以重名,但代表的是两个不同的变量
2.2 不可变类型,形参发生重指向,实参不变
def fn(num):
print('数字1>>>:',num) # 此处为 10
num = 20
print('数字2>>>:',num) # 此处为20
num = 10
fn(num)
print('数字3>>>:',num) # 此处为10
2.3 可变类型,形参发生值的内部变化,实参变,两个指向的是同一个地址
def func(ls):
print('信息:',ls) # 此处为 [10]
ls.append(20)
print('信息:',ls) # 此处为[10,20] 因为添加了一个元素到列表
ls = [10]
func(ls)
print('信息3:',ls) # [10,20] 此处ls就成了[10,20]
3. 实参的分类
实参分为:1 .位置 实参 2. 关键字 实参
def fn(a,b):
print(a,b)
# 拿实际值进行传参
fn(10,20) # 10 ==> a | 20 ===> b
拿位置 实参 进行传参:需要知道的是,形参 与 实参 的位置一一对应。比如第一号位的 实参,一定是传给一号位的 形参 的
a =100
b =200
fn(a,b) # a:100 ==>a | b:200 ==> b
fn(b,a) # a:200 ==>a | b:100 ==> b
拿关键字实参进行传参:指名道姓进行传参 -------实参 指名道姓 形参
例如:明确的:形参名目前位 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. 实参组合传参规则:必须先传位置实参,再传关键字实参
4 .形参的分类
六大分类:
4.1 无值位置形参 (位置形参) :可以被位置与关键字来进行传参,它必须传值,不传值会报错
4. 2 有值位置形参 (默认形参) :可以被位置与关键字实参来进行传参,可以不用传参,来采用它的默认值
4. 3 可变长位置形参:可以接收前两个没有接收完的位置参数,可以接受的个数为 0 ~ n 个,如果不传入参数会返回一个空元祖 (它会用一个元祖来包裹返回的值)
4. 4 无值关键字形参:只能由关键字实参来进行传参,必须传值,不传值会报错
4 .5 有值关键字形参:只能由关键字实参来进行传参,也可以不传参,来采用它的默认值
4. 6 可变长关键字形参:接收 第 4 和第 5 点没有接收完的关键字实参,接受的个数可以为 0 ~ n 个,如果不传入,返回的是一个空字典 ( 它会用一个元祖来包裹返回的值)
声明顺序:
4. 7 位置形参: a --> 默认形参:b ---> 可变长位置形参:args --->有无默认值关键字形参:c,d,e --->可边长关键字形参:kwargs
def fn ( a, b=10, *args, c, d=20, e, **kwargs ) :pass
需要注意的地方:
4. 8 可变长位置形参只能接收位置实参,想要被附上值,前面的有值位置形参的默认值就变的没有意义了
4. 9 args与kwargs是可变长形参的变量名,所以可以自定义,但是一般都会约定使用这两个来表示
4. 10 常出现的组合:
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
4. 11 使用法则:
1. 所有位置形参全部采用位置实参进行传值
2. 所有关键字形参全部采用关键字实参进行传值
3. 不管位置还是关键字形参,全部按照顺序进行传参
打散机制
```python
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第十一天的更多相关文章
- 初学 Python(十一)——切片
初学 Python(十一)--切片 初学 Python,主要整理一些学习到的知识点,这次是切片. #-*- coding:utf-8 -*- ''''' 切片 ''' L = ['name','age ...
- Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块
Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函 ...
- python 面向对象十一 super函数
python 面向对象十一 super函数 super函数用来解决钻石继承. 一.python的继承以及调用父类成员 父类: class Base(object): def __init__(se ...
- 孤荷凌寒自学python第十一天初识Python的字典类
孤荷凌寒自学python第十一天初识Python的字典类 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) Python的字典其实是一张二维对照表 下面举例说明: 键名Key 姓名 性别 身高 ...
- Python进阶(十一)----包,logging模块
Python进阶(十一)----包,logging模块 一丶包的使用 什么是包: 包是通过使用 .模块名的方式组织python模块名称空间的方式. 通俗来说,含有一个__init__.py文件的文 ...
- python第十一天-----补:线程池
低版本: #!/usr/bin/env python import threading import time import queue class TreadPool: ""&q ...
- selenium python (十一)alert/confirm/prompt的处理(js中的弹出框)
webdriver中处理js所生成的alert.confirm以及prompt,采用switch_to_alert()方法定位到alert/confirm/prompt.然后使用text/accept ...
- Python 第十一篇:开发堡垒机
一:SqlAlchemy ORM ORM:Object Relational Mapping 对象关系映射是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换 SQLAlchemy是 ...
- Python爬虫(十一)_案例:使用正则表达式的爬虫
本章将结合先前所学的爬虫和正则表达式知识,做一个简单的爬虫案例,更多内容请参考:Python学习指南 现在拥有了正则表达式这把神兵利器,我们就可以进行对爬取到的全部网页源代码进行筛选了. 下面我们一起 ...
随机推荐
- Java设计模式---桥接Bridge模式
参考于 : 大话设计模式 马士兵设计模式视频 写在开头: 桥接模式主要用于一件事物分成了两个维度,进行排列组合,比如礼物,可以分成优雅的礼物(抽象),花(具体),排列组合优雅的花! 1.为什么使用桥接 ...
- Deepin Linux系统的日常使用总结(日常施工)
1.登录root权限用户 sudo su 2.安装软件语句 apt-get install <package_name> 相对的, 安装:apt-get install <packa ...
- String-StringBuffer-StringBuilder的区别和源码分析
一,String,StringBuffer,StringBuilder三者之间的关系 三个类的关系:StringBuffer和StringBuilder都继承自AbstractStringBuilde ...
- solr8.0的简单搭建(一)
第一步,下载solr 进入solr官网进行下载:http://lucene.apache.org/solr/ 第二步: 将解压的solr放到自己指定的文件夹 第三步: 由于solr有自带服务器,所以可 ...
- Linux使用wget、安装Python
原文:https://blog.csdn.net/ghost_chou/article/details/81905302 1.指定需要安装的目录或创建并访问到该选择的目录下. mkdir /data/ ...
- datatable动态列处理,重绘表格(敲黑板,划重点!!!我肝了一天半才彻底弄懂这个东西,TAT)
datatable动态列处理,重绘表格 前言:至于动态列的绘画,我前面博客已经写过了,就是动态列的配置问题,不懂的去我博客看下,今天要写的呢,就是你已经写了一个动态列在datatable,现在你想重新 ...
- Docker-Docker-compose应用
Docker-compose是用来定义和运行多容器应用的工具,它是独立于docker存在的,需要单独安装.实际应用场景中,我们的应用可能被打包运行在不同的容器里面,例如一个常规的web应用可能会涉及到 ...
- ASP.NETMVC 分页
<div class="text-center"> <span style="display:inline-block; position:re ...
- js判断浏览器是否支持webGL
起因是我之前开发的网页,用到了three.js制作了一个3d的旋转球体效果. 在各种浏览器上运行都没问题,在IE上也做了兼容代码. 但是今天接电话,老板说你这网页在xp上不显示啊.IE上好使.goog ...
- Failure sending mail: The user or group name 'xxx\xxxx' is not recognized.Mail will not be resent
一批Reporting Service报表的订阅突然报如下错误: Failure sending mail: The user or group name 'xxx\xxxx' is not re ...