今日内容

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. es6 字符串的扩展和数值的扩展

    es6字符串的扩展 1. es6新增的一些方法 1.1 includes 判断是否包括在内,返回一个 true or false 1.2 statsWith 判断是否以什么开头,返回一个 true o ...

  2. js 3D旋转效果

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. cesium 之三维漫游飞行效果实现篇(附源码下载)

    前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...

  4. 【设计模式】抽象工厂模式 Abstract Factory Pattern

    简单工厂模式是一个工厂类根据工厂方法的参数创建不出不同的产品, 工厂方法模式是每一个产品都有一个一一对应的工厂负责创建该产品.那么今天要讲的抽象工厂模式是一个工厂能够产生关联的一系列产品.抽象工厂模式 ...

  5. Android为TV端助力 Linux命令查看包名类名

    先运行apk 再输入logcat | grep START 查看当前启动apk的包名和类名 adb shell "pm list packages -f | grep com.yulong. ...

  6. 局域网git服务器搭建(基于win7 + bonobo git server)

    公司内网有一台win7系统的服务器. 准备在上面部署git后台, 用于内网项目版本管理. 搜索了相关资料后, 在根据公司环境, 决定采用win7 + bonobo git server + git的方 ...

  7. Windows 组策略的生效规则

    一般的继承与处理规则 若上层父OU的某个组策略项目被设定,但是其下层子OU未设定该项目,则下层子OU继承上层父OU的这个组策略项目设定值 若在下层子OU内的某个组策略项目被设定,则此设定值预设会覆盖由 ...

  8. c语言static关键字的理解

    static 一.概述 在c语言中static恰当的使用能让程序更加完美,细节上的严谨,代码会更好,也更利于程序的维护与扩展. 而static使用灵活,且又有两种完全无关的用法,所以整理总结一下. 二 ...

  9. 初窥css---选择器及相关特性

    选择器及相关特性 基础选择器 标签选择器 相当于全选,在我看来局限性较大,也没啥意义的感觉,用处不太大 id选择器 有利于对于某个小盒子的部分属性进行改变,但是若是需要改的小盒子很多的话,就会很麻烦 ...

  10. 【spring源码分析】IOC容器初始化(二)

    前言:在[spring源码分析]IOC容器初始化(一)文末中已经提出loadBeanDefinitions(DefaultListableBeanFactory)的重要性,本文将以此为切入点继续分析. ...