今日内容

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第十一天的更多相关文章

  1. 初学 Python(十一)——切片

    初学 Python(十一)--切片 初学 Python,主要整理一些学习到的知识点,这次是切片. #-*- coding:utf-8 -*- ''''' 切片 ''' L = ['name','age ...

  2. Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块

    Python第十一天    异常处理  glob模块和shlex模块    打开外部程序和subprocess模块  subprocess类  Pipe管道  operator模块   sorted函 ...

  3. python 面向对象十一 super函数

    python 面向对象十一 super函数   super函数用来解决钻石继承. 一.python的继承以及调用父类成员 父类: class Base(object): def __init__(se ...

  4. 孤荷凌寒自学python第十一天初识Python的字典类

    孤荷凌寒自学python第十一天初识Python的字典类 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) Python的字典其实是一张二维对照表 下面举例说明: 键名Key 姓名 性别 身高 ...

  5. Python进阶(十一)----包,logging模块

    Python进阶(十一)----包,logging模块 一丶包的使用 什么是包: ​ 包是通过使用 .模块名的方式组织python模块名称空间的方式. 通俗来说,含有一个__init__.py文件的文 ...

  6. python第十一天-----补:线程池

    低版本: #!/usr/bin/env python import threading import time import queue class TreadPool: ""&q ...

  7. selenium python (十一)alert/confirm/prompt的处理(js中的弹出框)

    webdriver中处理js所生成的alert.confirm以及prompt,采用switch_to_alert()方法定位到alert/confirm/prompt.然后使用text/accept ...

  8. Python 第十一篇:开发堡垒机

    一:SqlAlchemy ORM ORM:Object Relational Mapping 对象关系映射是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换 SQLAlchemy是 ...

  9. Python爬虫(十一)_案例:使用正则表达式的爬虫

    本章将结合先前所学的爬虫和正则表达式知识,做一个简单的爬虫案例,更多内容请参考:Python学习指南 现在拥有了正则表达式这把神兵利器,我们就可以进行对爬取到的全部网页源代码进行筛选了. 下面我们一起 ...

随机推荐

  1. npm --save-dev --save 的区别

    我们在使用npm install 安装模块或插件的时候,有两种命令把他们写入到 package.json 文件里面去,比如: --save-dev(-D) --save(-S) 在 package.j ...

  2. XSS攻击之窃取Cookie

    10 年前的博客似乎有点老了,但是XSS 攻击的威胁依然还在,我们不得不防. 窃取Cookie是非常简单的,因此不要轻易相信客户端所声明的身份.即便这个Cookie是在数秒之前验证过,那也未必是真的, ...

  3. arcgis api 3.x for js 实现克里金插值渲染图不依赖 GP 服务(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  4. 【Linux】【MySQL】CentOS7安装最新版MySQL8.0.13(最新版MySQL从安装到运行)

    1.前言 框框博客在线报时:2018-11-07 19:31:06 当前MySQL最新版本:8.0.13 (听说比5.7快2倍) 官方之前表示:MySQL 8.0 正式版 8.0.11 已发布,MyS ...

  5. vue 外部字体图标使用,无须绝对路径引入办法

    通常外部字体图标都在使用 iconfont ,这种图标在网上搜到一大把都是由于路径问题显示不出来,或者是显示个方块. 最近的项目中也碰到这个坑爸的问题,总结一下解决办法: 和 webpack.conf ...

  6. fastjson SerializerFeature详解

  7. RPM-GPG-KEY详解

    GPG在Linux上的应用主要是实现官方发布的包的签名机制 GPG分为公钥及私钥 公钥:顾名思意,即可共享的密钥,主要用于验证私钥加密的数据及签名要发送给私钥方的数据 私钥:由本地保留的密钥,用于签名 ...

  8. $.each()、$.map()区别浅谈

    遍历应该是各种语言中常会用到的操作了,实现的方法也很多,例如使用for.while等循环语句就可以很轻松的做到对数组或对象的遍历,今天想讲的不是它们,而是简单方便的遍历方法. 大致的整理了一下,经常用 ...

  9. Making A Circle Out Of Squares

    方形画圆 解决方案: 循环偏移5角度画方形 效果图: Python 源码 import turtle; window = turtle.Screen(); window.bgcolor("p ...

  10. Cordova入门系列(三)Cordova插件调用 转发 https://www.cnblogs.com/lishuxue/p/6018416.html

    Cordova入门系列(三)Cordova插件调用   版权声明:本文为博主原创文章,转载请注明出处 上一章我们介绍了cordova android项目是如何运行的,这一章我们介绍cordova的核心 ...