小括号、中括号名字
()函数调用符
[] 索引调用符 函数的注释:
官方推荐: 查看注释 :funcming.__doc__      funcming.__name__ def func(name, age, sex): #形参
 print(name,age,sex)
info = func(name, age,sex)
实参的形参位置必须一一对应
def func(name, age, sex='男'): #混合型参
print(name,age,sex)
info = func(name, age,sex)
实参的形参位置必须一一对应
实参可以是三个也可以是两个,当是三个的时候会覆盖sex='男'的值,并传递到函数内执行
当实参是两个的时候,sex='男'的值不会被改变
def func(name, age, sex): 
print(name,age,sex)
info = func(name, age,sex)
print(name,age,sex='男') #混合实参
实参sex='男' 会传递给形参sex
这种情况,实参的形参位置必须一 args和kwarga 是可以更换的,但是程序员约定都用它
用途:在不明确接受参数,数量时使用*args和**kwargs
动态位置参数>动态关键字参数
形参:位置>动态位置>默认位置>动态默认参数
实参:位置>关键字参数
在实参调用的时候*将可迭代的对象打散,字典是将键取出
在形参处出现*就是聚合
在实参调用**就是将字典打散成 关键字(键 = 值)
在形参处出现**就是将关键字参数聚合成一个字典 在一个局部空间内,nonlocal还修改离他最近的变量,如果上一层没有就继续向上找,直到找到局部变量顶层,如果局部空间中没有就报错
global:在局部修改全局变量,如果没有就创建一个新的 3.空间名称

命名空间一共分为三种:


  全局命名空间


  局部命名空间


  内置命名空间


*内置命名空间中存放了python解释器为我们提供的名字:input,print,str,list,tuple...它们都是我们熟悉的,拿过来就可以用的方法。


三种命名空间之间的加载与取值顺序:


加载顺序:内置命名空间(程序运行前加载)->全局命名空间(程序运行中:从上到下加载)->局部命名空间(程序运行中:调用时才加载)


取值顺序:


  在局部调用:局部命名空间->全局命名空间->内置命名空间


  在全局调用:全局命名空间->内置命名空间


综上所述,在找寻变量时,从小范围,一层一层到大范围去找寻。


作用域


作用域就是作用范围,按照生效范围可以分为全局作用域和局部作用域。


全局作用域:包含内置名称空间、全局名称空间,在整个文件的任意位置都能被引用、全局有效


局部作用域:局部名称空间,只能在局部范围生效

global关键字,nonlocal关键字。

global:

  1,声明一个全局变量。

global (声明)我要修改,找到要修改的值,修改   在局部修改全局

  2,在局部作用域想要对全局作用域的全局变量进行修改时,需要用到 global(限于字符串,数字)。

li = [1,2,3]
dic = {'a':'b'}
def change():
    li.append('a')
    dic['q'] = 'g'
    print(dic)
    print(li)
change()
print(li)
print(dic)
对于可变数据类型的应用举例

nonlocal:

  1,不能修改全局变量。

  2,在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,并且引用的哪层,从那层及以下此变量全部发生改变。

def add_b():
    b = 42
    def do_global():
        b = 10
        print(b)
        def dd_nonlocal():
            nonlocal b
            b = b + 20
            print(b)
        dd_nonlocal()
        print(b)
    do_global()
    print(b)
add_b()
nonlocal关键字举例
 
 

函数名本质上就是函数的内存地址。

1.可以被引用

 可以被引用

2.可以被当作容器类型的元素

 可以当做容器类型的元素

3.可以当作函数的参数和返回值

 可以当做函数的参数和返回值
 第一类对象的概念

*不明白?那就记住一句话,就当普通变量用

五,闭包

def func():
name = '太白金星'
def inner():
print(name)

# 1.一个嵌套函数

# 在嵌套函数的内部函数使用外部(非全局的变量)
# 满足以上两条就是闭包
# python中闭包,会进行内存驻留, 普通函数执行完后就销毁了
# 全局里存放会有污染和不安全的现象
# 面试必问,装饰器 -- 装饰器的本质就是闭包
# 闭包有个弊端:会出现内存泄漏


# def wrapper():
# a = 10
# def inner():
# print(a)
# # print(inner.__closure__) # 不是None 就是闭包
# inner()
# wrapper() 生成器

生成器本质是一个迭代器

生成器一定是迭代器,迭代器不一定是一个生成器

生成器是可以让程序员自己定义的一个迭代器

生成器的好处,节省内存空间

生成器的特性一次性的,惰性机制,从上向下

send相当于next+传值,第一次触发商城器的时候,第一次使用生成器的时候使用send里面的值必须是None

一般建议使用__next__

python 2 iter()  next()

python 3 iter()  next()        __iter__( )      __next__()

# def f():
# def a():
# def b():
# def c():
# return '哈撒给!'
# return c()
# return b()
# return a()
# print(f()) # for i in range(3):
# def func(x):
# print(x*i)
# func(2) # 0 2 4 # li = [] # [func,func,func]
# for i in range(3):
# def func(x):
# print(x*i)
# li.append(func)
#
# for func in li: # [func,func,func]
# func(2) #结果: 4 4
可变参数 
传入一个可迭代对象,迭代元素求和
def add(nums):
    sum = 0
    for x in nums:
        sum += x
    return sum
out = add([1,3,5,7])
out1 = add((1,3,4,5,6))
print(out)
print(out1)
 
一个形参可以匹配任意个参数
位置参数的可变参数
def add(*nums):
    sum = 0
    print(type(nums))
    for x in nums:
        sum += x
    return sum
out = add(1,3,5,7)
print(out)
在形参前使用*表示该参数是可变参数,可以接受多个参数
收集多个实参为一个tuple
 
关键字参数的可变参数
def showconfig(**kwargs):
    for k,v in kwargs.items():
        print('{}={}'.format(k,v))
 
showconfig(host='127.0.0.0',port='8080',username='vayne',passwd='magedu')
形参前使用**符号,表示可以接收多个关键字参数
收集的实参名和值组成一个字典
def showconfig(**kwargs):
    print(type(kwargs))
    print(kwargs)
    for k, v in kwargs.items():
        print('{}={}'.format(k, v))
 
showconfig(host='127.0.0.0',port='8080',username='vayne',passwd='magedu')
 
{'passwd': 'magedu', 'port': '8080', 'host': '127.0.0.0', 'username': 'vayne'}
passwd=magedu
port=8080
host=127.0.0.0
 
总结
位置可变参数在形参前使用一个*号
关键字可变参数在形参前使用列个**号
位置可变参数和关键字可变参数可以收集若干个实参,位置可变参数收集形成一个tuple,关键字可变参数
收集形成一个dict
混合使用参数的时候,可变参数要放在参数列表的最后,普通参数需要放到参数列表的前面,位置可变参数
需要放在关键字可变参数之前
def fn(x,y,*args,**kwargs):
    print(x)
    print(y)
    print(args)
    print(kwargs)
 
 
 
fn(3,5,7,9,2,a=1,b='python')
fn(3,5)
fn(3,5,7)
fn(3,4,a=1,b='python')
 
 
 
 
 
 

day09 10 11 12 三天函数内容的更多相关文章

  1. Java面试题:n=2\n1*2*5*6\n--3*4\n\nn=3\n1*2*3*10*11*12\n--4*5*8*9\n----6*7\n如何实现如上结构的数据

    今天学长在面试的时候遇到了一道题,然后让大家做一做. 在不看下面的答案之前,悠闲的朋友们一起来抖动一下大脑吧! 以下是我的想法: import java.util.Scanner;public cla ...

  2. atitit.Oracle 9 10 11 12新特性attilax总结

    atitit.Oracle 9  10 11  12新特性 1. ORACLE 11G新特性 1 1.1. oracle11G新特性 1 1.2. 审计 1 1.3. 1.   审计简介 1 1.4. ...

  3. 剑指offer19:按照从外向里以顺时针的顺序依次打印出每一个数字,4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

    1 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印 ...

  4. win7 PLSQL Developer 10/11/12 连接 Oracle 10/11/12 x64位数据库配置详解(与32位一样,只要注意对应Oracle Instant Client版本) tns 错误和 nls错误

    环境win7 x64 PLSQL Developer 10 与 11 Oracle Instant Client 10 与 12 参考http://blog.csdn.net/chen_zw/arti ...

  5. MySQL Crash Course #05# Chapter 9. 10. 11. 12 正则.函数. API

    索引 正则表达式:MySQL only supports a small subset of what is supported in most regular expression implemen ...

  6. 【20171027早】alert(1) to win 第9,10,11,12题

    人在江湖,不服就干! 第9题: function escape(s) { function htmlEscape(s) { return s.replace(/./g, function(x) { r ...

  7. 鸟哥的Linux私房菜-第10/11/12/13章(vim程序编辑器、学习bash、正则表达式与文件格式化处理、学习Shell Scripts)

    第10章 vim程序编辑器 可以将vim看做vi的进阶版本,vim可以用颜色或底线等方式来显示出一些特殊的信息. 为何要学习vim?因为: a. 所有的 Unix Like 系统都会内建 vi 文书编 ...

  8. Linux Ctrl + Alt + Fx | (x = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)

    VMware Ubuntu中,按下 Ctrl + Alt + Fx | (x = 1...12),会出现不同的效果. 1. Ctrl + Alt + F1 ~ F6 Ctrl + Alt + F1 ~ ...

  9. jdk 9 10 11 12 13 新特性

    jdk 9 新特性 1.集合加强 jdk9 为所有集合(List/Set/Map)都增加了 of 和 copyOf 方法,用来创建不可变集合,即一旦创建就无法再执行添加.删除.替换.排序等操作,否则将 ...

随机推荐

  1. Know the Core Objects of Your App---了解应用程序的内核对象

    Back to App Design You develop apps using the Cocoa application environment. Cocoa presents the app’ ...

  2. WPF 加载 WINFORM控件 异常: 调度程序进程已挂起,但消息仍在处理中

    在加载TradeAtServer的统计中的 单个合约盈亏情况 异常:,调度程序进程已挂起,但消息仍在处理中 发现可能是属性设置引发的问题 比如DateTimePikcer.Value+= set, g ...

  3. jQuery中的.html()和.text()及.val()区别

    https://www.cnblogs.com/zhang-xun/p/6766264.html

  4. 从输入url到浏览器显示页面的过程

    总体来说有两个大的方面: 一.网络通信连接部分.二.页面渲染展示部分. 细分详细过程: (网络通信) 1.输入url. 2.DNS解析域名. 3.拿到IP地址后,浏览器向服务器建立tcp连接. 4.浏 ...

  5. Mysql查询语句的 where子句、group by子句、having子句、order by子句、limit子句

    Mysql的各个查询语句 一.where子句   语法:select *|字段列表 from 表名 where 表达式.where子句后面往往配合MySQL运算符一起使用(做条件判断) 作用:通过限定 ...

  6. 题解报告:hihoCoder #1050 : 树中的最长路

    描述 上回说到,小Ho得到了一棵二叉树玩具,这个玩具是由小球和木棍连接起来的,而在拆拼它的过程中,小Ho发现他不仅仅可以拼凑成一棵二叉树!还可以拼凑成一棵多叉树——好吧,其实就是更为平常的树而已. 但 ...

  7. [已读]JavaScript编程精解

    译者汤姆大叔,应该很多人都知道,他写了一系列的关于闭包与作用域理解的文章,但是由于创建了一些我不理解的新名词,我不爱看. <JavaScript编程精解>算是买得比较早的一本书,那会大肆搜 ...

  8. 真tm无聊,这几天。。。

    临近期末了,每天都要和学霸一起上自习. 很不喜欢学习和自己未来没多大用的东西 老师画的那些重点是对我们好吗~ 每天感觉都在折磨自己,不想学,学不进去,心里很烦躁,浮躁. 人生苦短->_-> ...

  9. 合理设置apache的连接数及进程工作方式

    网站在线人数增多,访问时很慢.初步认为是服务器资源不足了,但经反复测试,一旦连接上,不断点击同一个页面上不同的链接,都能迅速打开,这种现象就是说明apache最大连接数已经满了,新的访客只能排队等待有 ...

  10. 第一个 swift 项目

    今天 学习了 一丢丢 swift,特此记录一下 ! 原来创建的时候 ,只要把 语言 由以前的Object-C改为Swift,变创建好了自己的swift工程 第一个简单的swift demo 上代码 i ...