python‘s tenth day for me
动态参数 *args **kwargs
*args 动态参数,万能参数
# args 接受的就是实参对应的 所有位置参数,并将其放在元祖中。
def func(*args):
print(args)
func(1,2,3,4,5,6) # (1, 2, 3, 4, 5, 6)
# 形参对应顺序: 位置参数, *args ,默认参数。
def func(a,b,c,*args,sex = '男'):
print(a)
print(b)
print(c)
print(args)
print(sex)
func(2,3,4,5,6,7,sex = '女') #
#
#
# (5, 6, 7)
# 女
**kwargs 动态传参,它将所有的关键字参数(无意义的)放到一个字典中。
def func(a,b,c,**kwargs):
print(a)
print(b)
print(c)
print(kwargs)
func(1,2,d = 4,v = 6,c = 3) #
#
#
# {'d': 4, 'v': 6}
形参的最终顺序: 位置参数, *args,默认参数,**kwargs
def func(a,b,c,d,*args,e = '男',**kwargs):
print(a)
print(b)
print(c)
print(d)
print(args)
print(e)
print(kwargs)
func(1,2,3,4,5,6,7,e = '女',f = 4,v = 6,) #
#
#
#
# (5, 6, 7)
# 女
# {'v': 6, 'f': 4}
# 在函数的调用执行时,
*可迭代对象,代表打散可迭代对象(list,tuple,str,dict(键))将元素一一加入到args.
# 在函数定义时,*args,**kwargs 代表的是聚合。
def func(*args):
print(args)
l1 = [1,2,3]
l2 = [4,5,6,7]
func(*l1,*l2) # (1, 2, 3, 4, 5, 6, 7)
def func(*args):
print(args)
func(1,2,3,4,5,6,7) # (1, 2, 3, 4, 5, 6, 7)
**字典,代表打散,将所有键值对放到一个kwargs字典里。
def func(**kwargs):
print(kwargs)
dic1 = {'k1':1,'k2':2,'k3':3}
dic2 = {'name':'顾清秋','age':17}
func(**dic1,**dic2) # {'name': '顾清秋', 'k3': 3, 'age': 17, 'k2': 2, 'k1': 1}
命名空间一共分为三种:
全局命名空间:代码在运行的伊始,创建的存储 ‘变量名与值的关系’ 的空间叫做全局命名空间。
局部命名空间,在函数的运行中开辟的临时空间叫做局部命名空间。
内置命名空间。python解释器存在的内置函数运行时的空间叫做内置命名空间。
三种命名空间的加载顺序与取值顺序:
加载顺序:内置命名空间--->全局命名空间--->局部命名空间。
取值顺序: 局部命名空间--->全局命名空间--->内置命名空间。
综上所述,在找寻变量时,从小范围,一层一层到大范围去找寻。
作用域:
作用域就是作用范围,按照生效范围可以分为全局作用域和局部作用域。
全局作用域:包含内置命名空间,全局命名空间,在整个文件的任意位置都能被引用,全局有效。
局部作用域:局部命名空间,只能在局部范围内生效。
globals 和 locals 方法:
globals: 函数会以字典类型返回当前位置的全部全局变量。
locals: 函数会以字典类型返回当前位置的全部局部变量。
c = 1
def func():
a = 12
b = 20
print(locals()) #{'b': 20, 'a': 12}
print(globals())
func()
global 关键字,nonlocal 关键字。
global:
1. 声明一个全局变量。
def func():
global a
a = 3
func()
print(a) #
2. 在局部作用域想要对全局作用域的全局变量进行修改时,需要用到global(限于字符串,数字)。
count = 1
def search():
global count
count = 2
search()
print(count) #
对可变数据类型(list,dict,set)可以直接引用不用通过global。
li = [1,2,3]
dic = {'k1':1}
def change():
li.append('a')
dic['k2'] = 2
print(li) #[1, 2, 3, 'a']
print(dic) #{'k2': 2, 'k1': 1}
change()
print(li) #[1, 2, 3, 'a']
print(dic) #{'k2': 2, 'k1': 1}
nonlocal:
1,不能修改全局变量。
2,在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,并且引用的哪层,从那层及以下此变量全部发生改变。
def func():
b = 2
def func1():
b = 4
print(b) #
def func2():
nonlocal b
b = b + 4 #
print(b)
func2()
print(b) #
func1()
print(b) #
func()
python‘s tenth day for me的更多相关文章
- Python语言100例
Python版本:python 3.2.2 电脑系统:win7旗舰 实例来源:python菜鸟教程100例 #!/usr/bin/python # -*- coding: UTF-8 -*- impo ...
- 机器学习算法基础(Python和R语言实现)
https://www.analyticsvidhya.com/blog/2015/08/common-machine-learning-algorithms/?spm=5176.100239.blo ...
- python瓦登尔湖词频统计
#瓦登尔湖词频统计: import string path = 'D:/python3/Walden.txt' with open(path,'r',encoding= 'utf-8') as tex ...
- Python 100例(上)
如果你已经把基础看完,可以尝试一下看看以下例子了,如果不会做也不要紧,你要尝试手动把所有的代码都敲一边.别嫌麻烦,因为都是从麻烦到简单的. 实例1: 题目:有1.2.3.4个数字,能组成多少个相互不同 ...
- 10个Python练手小程序,学习python的很好的资料
[程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列 ...
- Python机器学习实践与Kaggle实战(转)
https://mlnote.wordpress.com/2015/12/16/python%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E5%AE%9E%E8%B7%B5 ...
- python部分内容存档
笨办法学python. 1 Ec6字符串和文本... 1 ec7. 1 ec8. 1 Ec9. 1 Ec10 转义字符... 1 Ec11提问... 1 raw_input和input的区别... 1 ...
- So you want to write a desktop app in Python
So you want to write a desktop app in Python Thomas Kluyver 2014-06-16 23:55 51 Comments Source This ...
- 【Python精华】100个Python练手小程序
100个Python练手小程序,学习python的很好的资料,覆盖了python中的每一部分,可以边学习边练习,更容易掌握python. [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同 ...
随机推荐
- uva11827gcd
gcd裸题,不过输入要注意gets会tle,要用快速读入 #include<map> #include<set> #include<cmath> #include& ...
- 在Windows下MyEclipse运行JAVA程序连接HBASE读取数据出错
运行环境:Hadoop-2.5.0+Hbase-0.98.6 问题描述: 15/06/11 15:35:50 ERROR Shell: Failed to locate the winutils bi ...
- 51nod1293 dp
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1293 1293 球与切换器 题目来源: Codility 基准时间限制: ...
- Java8_02_lambda表达式
一.前言 这一节我们来了解下lambda表达式,主要关注以下几点: 行为参数化 匿名类 Lambda 表达式 方法 引用 二.行为参数化 1.概念 行为参数化(behavior parameteriz ...
- 【vs2013】使用VS2013打包程序
如何用 VS 2013 打包 程序? 摘自:http://www.zhihu.com/question/25415940 更多请见摘自. 答案就在这里,想要你的exe独立运行在XP中:1.将平台工具集 ...
- python学习之数据结构
python的数据很丰富,所以对于数据分析来讲, python是一种最合适的选择 下面讲述一下常见的数据结构,包括栈,队列,元组,字典,集合等,以及对这些数据结构进行操作 #堆栈,后进先出 a=[10 ...
- ehchache和redis
Ehcache 在java项目广泛的使用.它是一个开源的.设计于提高在数据从RDBMS中取出来的高花费.高延迟采取的一种缓存方案.正因为Ehcache具有健壮性(基于java开发).被认证(具有apa ...
- 互联网公司面试必问的mysql题目(下)
这是mysql系列的下篇,上篇文章地址我附在文末. 什么是数据库索引?索引有哪几种类型?什么是最左前缀原则?索引算法有哪些?有什么区别? 索引是对数据库表中一列或多列的值进行排序的一种结构.一个非常恰 ...
- WCF *.svc 自定义地址路由映射
一般在创建WCF服务时会用Serivce.svc文件访问,地址如:http://localhost/applicationname/Serivce.svc/Name 现在用路由映射成:http://l ...
- SqlServer 数据库/数据表 拆分(分布式)【转】
通过某种特定的条件,将存放在同一个数据库中的数据分散存放到多个数据库上,实现分布存储,通过路由规则路由访问特定的数据库,这样一来每次访问面对的就不是单台服务器了,而是N台服务器,这样就可以降低单台机器 ...