Python进阶——笔记1
1、*args 的用法
*args
和 **kwargs
主要用于函数定义。 你可以将不定数量的参数传递给一个函数。
这里的不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下使用这两个关键字。 *args
是用来发送一个非键值对的可变数量的参数列表给一个函数.
- def test_var_args(f_arg, *argv):
- print("first normal arg:", f_arg)
- for arg in argv:
- print("another arg through *argv:", arg)
- test_var_args('yasoob', 'python', 'eggs', 'test')
2、**kwargs 的用法
**kwargs
允许你将不定长度的键值对, 作为参数传递给一个函数。 如果你想要在一个函数里处理带名字的参数, 你应该使用**kwargs
。
- def greet_me(**kwargs):
- for key, value in kwargs.items():
- print("{0} == {1}".format(key, value))
- >>> greet_me(name="yasoob")
- name == yasoob
使用 *args
和 **kwargs
来调用函数
- def test_args_kwargs(arg1, arg2, arg3):
- print("arg1:", arg1)
- print("arg2:", arg2)
- print("arg3:", arg3)
- # 首先使用 *args
- >>> args = ("two", 3, 5)
- >>> test_args_kwargs(*args)
- arg1: two
- arg2: 3
- arg3: 5
- # 现在使用 **kwargs:
- >>> kwargs = {"arg3": 3, "arg2": "two", "arg1": 5}
- >>> test_args_kwargs(**kwargs)
- arg1: 5
- arg2: two
- arg3: 3
标准参数与*args、**kwargs
在使用时的顺序
- some_func(fargs, *args, **kwargs)
3、调试(Debugging)
利用好调试,能大大提高你捕捉代码Bug的。大部分新人忽略了Python debugger(pdb
)的重要性。 在这个章节我只会告诉你一些重要的命令,你可以从官方文档中学习到更多。
译者注,参考:https://docs.python.org/2/library/pdb.html Or https://docs.python.org/3/library/pdb.html
从命令行运行
你可以在命令行使用Python debugger运行一个脚本, 举个例子:
$ python -m pdb my_script.py
这会触发debugger在脚本第一行指令处停止执行。这在脚本很短时会很有帮助。你可以通过(Pdb)模式接着查看变量信息,并且逐行调试。
从脚本内部运行
同时,你也可以在脚本内部设置断点,这样就可以在某些特定点查看变量信息和各种执行时信息了。这里将使用pdb.set_trace()
方法来实现。举个例子:
import pdb
def make_bread():
pdb.set_trace()
return "I don't have time"
print(make_bread())
试下保存上面的脚本后运行之。你会在运行时马上进入debugger模式。现在是时候了解下debugger模式下的一些命令了。
命令列表:
c
: 继续执行w
: 显示当前正在执行的代码行的上下文信息a
: 打印当前函数的参数列表s
: 执行当前代码行,并停在第一个能停的地方(相当于单步进入)n
: 继续执行到当前函数的下一行,或者当前行直接返回(单步跳过)
单步跳过(n
ext)和单步进入(s
tep)的区别在于, 单步进入会进入当前行调用的函数内部并停在里面, 而单步跳过会(几乎)全速执行完当前行调用的函数,并停在当前函数的下一行。
4、Map,Filter 和 Reduce
Map,Filter 和 Reduce 三个函数能为函数式编程提供便利
map
Map
会将一个函数映射到一个输入列表的所有元素上。
- items = [1, 2, 3, 4, 5]
- squared = []
- for i in items:
- squared.append(i**2)
- #map
- items = [1, 2, 3, 4, 5]
- squared = list(map(lambda x: x**2, items))
大多数时候,使用匿名函数(lambda)来配合map
filter
filter
过滤列表中的元素,并且返回一个由所有符合要求的元素所构成的列表,符合要求
即函数映射到该元素时返回值为True.
- number_list = range(-5, 5)
- less_than_zero = filter(lambda x: x < 0, number_list)
- print(list(less_than_zero))
- # 译者注:上面print时,加了list转换,是为了python2/3的兼容性
- # 在python2中filter直接返回列表,但在python3中返回迭代器
- # 因此为了兼容python3, 需要list转换一下
- # Output: [-5, -4, -3, -2, -1]
reduce
当需要对一个列表进行一些计算并返回结果时,Reduce
是个非常有用的函数
- from functools import reduce
- product = reduce( (lambda x, y: x * y), [1, 2, 3, 4] )
- # Output: 24
5、set
(集合)数据结构
set
(集合)是一个非常有用的数据结构。它与列表(list
)的行为类似,区别在于set
不能包含重复的值。
例如你可能想检查列表中是否包含重复的元素
- some_list = ['a', 'b', 'c', 'b', 'd', 'm', 'n', 'n']
- duplicates = set([x for x in some_list if some_list.count(x) > 1])
- print(duplicates)
- ### 输出: set(['b', 'n'])
交集
- valid = set(['yellow', 'red', 'blue', 'green', 'black'])
- input_set = set(['red', 'brown'])
- print(input_set.intersection(valid))
- ### 输出: set(['red'])
差集
- valid = set(['yellow', 'red', 'blue', 'green', 'black'])
- input_set = set(['red', 'brown'])
- print(input_set.difference(valid))
- ### 输出: set(['brown'])
6、三元运算符
伪代码
- #如果条件为真,返回真 否则返回假
- condition_is_true if condition else condition_is_false
- is_fat = True
- state = "fat" if is_fat else "not fat"
返回x的绝对值:
- number=(input('please enter a number:'))
- try:
- number=int(number)
- result=( (number) if number>0 else (number*-1) )
- except:
- result='something wrong happened!'
- print(result)
7、Global和Return
global
变量意味着我们可以在函数以外的区域都能访问这个变量
- # 首先,是没有使用global变量
- def add(value1, value2):
- result = value1 + value2
- add(2, 4)
- print(result)
- # Oh 糟了,我们遇到异常了。为什么会这样?
- # python解释器报错说没有一个叫result的变量。
- # 这是因为result变量只能在创建它的函数内部才允许访问,除非它是全局的(global)。
- Traceback (most recent call last):
- File "", line 1, in
- result
- NameError: name 'result' is not defined
- # 现在我们运行相同的代码,不过是在将result变量设为global之后
- def add(value1, value2):
- global result
- result = value1 + value2
- add(2, 4)
- print(result)
- 6
8、虚拟环境(virtualenv)
使用virtualenv
!针对每个程序创建独立(隔离)的Python环境,而不是在全局安装所依赖的模块。
要安装它,只需要在命令行中输入以下命令:
- $ pip install virtualenv
最重要的命令是:
- $ virtualenv myproject
- $ source bin/activate
执行第一个命令在myproject
文件夹创建一个隔离的virtualenv环境,第二个命令激活这个隔离的环境(virtualenv
)。
如果你想让你的virtualenv使用系统全局模块,请使用--system-site-packages
参数创建你的virtualenv,例如:
- virtualenv --system-site-packages mycoolproject
使用以下命令可以退出这个virtualenv:
- $ deactivate
Python进阶——笔记1的更多相关文章
- python进阶笔记 thread 和 threading模块学习
Python通过两个标准库thread和threading提供对线程的支持.thread提供了低级别的.原始的线程以及一个简单的锁.threading基于Java的线程模型设计.锁(Lock)和条件变 ...
- Python进阶笔记
列表生成式 函数的参数类型 lambda函数 map, reduce, filter, sorted函数 eval, exec, join, zip函数 itertools中的函数 copy与deep ...
- Python学习笔记进阶篇——总览
Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(Socket编程进阶&多线程.多进程) Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(异常处理) Pyth ...
- python进阶学习笔记(一)
python进阶部分要学习的内容: 学习目标: 1.函数式编程 1.1,什么是函数式编程 函数式编程是一种抽象计算的编程模式 不同语言的抽象层次不同: 函数式编程的特点: python支持的函数式编程 ...
- Python学习笔记—itertools模块
这篇是看wklken的<Python进阶-Itertools模块小结> 学习itertools模块的学习笔记 在看itertools中各函数的源代码时,刚开始还比较轻松,但后面看起来就比较 ...
- Python学习笔记基础篇——总览
Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...
- python学习笔记目录
人生苦短,我学python学习笔记目录: week1 python入门week2 python基础week3 python进阶week4 python模块week5 python高阶week6 数据结 ...
- Python进阶基础学习(多线程)
Python进阶学习笔记(一) threading模块 threading.thread(target = (函数)) 负责定义子线程对象 threading.enumerate() 负责查看子线程对 ...
- Python进阶----反射(四个方法),函数vs方法(模块types 与 instance()方法校验 ),双下方法的研究
Python进阶----反射(四个方法),函数vs方法(模块types 与 instance()方法校验 ),双下方法的研究 一丶反射 什么是反射: 反射的概念是由Smith在1982年首次提出的 ...
随机推荐
- <iOS 组件与框架> -- UIKit Dynamics
UIKit Dynamics 结合 『iOS 组件与框架 』一书.总结的知识点与demo demo 地址: GitHub地址 一.概述 1.UIKit Dynamics 是 iOS 7 新增的内容.其 ...
- 让getElementsByClassName兼容
function getElementsByClassName(node, classname){ if(node.getElementsByClassName){ //使用现有方法 return n ...
- JS监听div的resize事件
原文地址:http://zhangyiheng.com/blog/articles/div_resize.html 需求 开发过程中经常遇到的一个问题就是如何监听一个div的size变化. 比如我用c ...
- dubbo的简单应用
一. dubbo简介 dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架. 二. 架构 引用dubbo的架构图: Provide ...
- 将angular-ui-bootstrap的弹出框定义成一个服务的实践
定义一个弹出框的服务:alert_boxdefiine(["app"],function(mainapp){ mainapp.controller('ModalInstanceCt ...
- C#继承的执行顺序
自己对多态中构造函数.函数重载执行顺序和过程一直有些不理解,经过测试,对其中的运行顺序有了一定的了解,希望对初学者有些帮助. eg1: public class A { public A() { Co ...
- workerman启动失败解决
提示stream_socket_server(): unable to connect to tcp://0.0.0.0:2120 (Address already in use)php xxx.ph ...
- php防止浏览器点击返回按钮重复提交数据
<!--html中存放隐藏域数据--> <input type="hidden" value='{$sun_nums}' name='sub_nums' /> ...
- IE的hack问题浅谈
*我一直以为是IE7的专属选择. 开始,我以为是bug ,怎么可能会有+号.一定是哪位同事写错了.找了度娘才知道自己的不足.原来也是可以的. 后来,通过ie8和ie7来调整自己的css.也感觉不用ha ...
- (转载)Java自带的GUI性能监控工具Jconsole以及JisualVM简介
原文链接:http://blog.csdn.net/chendc201/article/details/22905503 1 Jconsole 1.1 简介以及连接 JConsole是一个基于JMX的 ...