【Python】 零碎知识积累 II

零碎积累II

■  global关键字用于把跟着的变量声明为全局变量。在看似不属于其的命名空间里也可以引用它。

■  讲一个一维列表二维化的方式,用简单的一行语句来表达:

[[array[rows*y+cols] for cols in range(y)] for rows in range(x)]
#array是一个一维列表(或者数组),x表示二维化后的行数,y表示列数

■  想用C,java里面的switch语句结构,但是python里没有的时候,可以

  1.  搞很多个if判断,不过这样很繁琐

  2.  建立一个字典,key是switch的各个case的值,而value写函数对象进行相应的操作

■  关于在函数的参数前加*,分成两个情况

  1.在定义函数的时候:需要知道的是,很多场合下写的*args,**kwargs中的args和kwargs只是一种习惯,你可以把它换成其他变量名称,在函数中换那个名称引用就可以了。
    一个*表示函数可以接受任意多个函数,它会把所有不是实名参数的参数整合成一个元组,并把其作为参数名代表的对象。比如:

def test(paraA,paraB,*args):
    print paraA
    print paraB
    print type(args),args

if __name__ == "__main__":
    test(1,2,3,4,5)

#输出:
1
2
<type ‘tuple‘> (3,4,5)

    两个**表示可以接受任意多个实名参数,即传参数的时候超过限额的部分也可以加上参数的名称了。而函数会把kwargs整合成一个字典供函数引用。比如:

def test(paramA,paramB=‘B‘,**kwargs):
    print paramA
    print paramB
    print type(kwargs),kwargs

if __name__ == "__main__":
    test(1,2,C=3,D=4,F=5)

#输出
1
2
<type ‘dict‘> {‘C‘:3,‘D‘:4,‘F‘:5}

    test(1,2,3,4,5)    #报错,参数个数不对

   2. 调用函数时加上*

    当在调用函数时参数前加上*,(这个参数通常是个sequence之类的iterable对象)意思是把参数值拆分成一个个小单元,并将小单元一一传递给函数作为参数。单元的个数和函数定义时要求的参数值一致。比如:

    

def test(a,b,c):
    print "a:",a
    print "b:",b
    print "c:",c

if __name__ == "__main__":
    test(*[1,2,3])

#输出:
a: 1
b: 2
c: 3

■  说到函数的实名虚名参数问题,还有一个顺序问题需要注意。就是说在定义和使用时虚名参数一定要放在实名参数之前

  def func(a,b,c=1)  正确

  def func(a,b=1,c)  错误

■  zip函数

  zip函数接受包括0个在内任意多个sequence作为参数。将每个sequence的[0]组合成元组1,[1]组合成元组2........

  最终返回的是[元组1,元组2,元组3....]

  如果参数的长度参差不齐,那就以短的序列为标准,即长的序列多于最短的那个长度的那部分全部都舍去

■  if和else可以写在一行里

  比较容易想到的是[x for x in range(10) if x%2 == 0]这样的列表生成器

  这种列表表达式还可以接上else:[x if x%2 == 0 else x*3 for x in range(10)] 相当于偶数原封不动输出,奇数乘以三

  上面这种表达式的根源是类似后面这个表达式的用法 a if a>0 else -a (计算绝对值)

  在函数的返回语句中大概可以通过这样的表达式来做一个最后的判断。return a if a > 0 else -a

■  类里面可以出现一些常量,写在所有成员方法的外面,前面不用写self.,但是调用的时候要用self.常量名调用。

  比如:

class test():
    class_dict = {"ip":"127.0.0.1"}
    def __init__(self):
        self.port = 8080

    def __str__(self):
        return self.class_dict.get("ip"),self.port

print test()

>>>127.0.0.1 8080

  但是一般来说和java里面不一样,这些常量起的都是一些辅助作用

时间: 2024-10-10 17:15:46

【Python】 零碎知识积累 II的相关文章

【Python】 零碎知识积累 III

零碎积累 III ■ 函数的参数默认值在函数定义时确定并保存在内存中,调用函数时不会在内存中新开辟一块空间然后用参数默认值重新赋值,而是单纯地引用这个参数原来的地址.这就带来了一个坑,那就是当你在函数体中对默认参数做一些改变的时候,若参数默认值是int,str这种不可变类型,那么还好,因为默认参数在内存中并没改变,只是参数指向另一块空间:但若是list这种可变类型,当你对默认参数做改变的时候,将会直接影响这个参数在内存中实际的值,这也就影响了下次调用这个函数时参数的默认值.比如: def foo

【转】Python零碎知识(2):强大的zip

转自:http://www.cnblogs.com/BeginMan/archive/2013/03/14/2959447.html 这篇博文讲的挺好的 一.代码引导 首先看这一段代码: 1 >>> name=('jack','beginman','sony','pcky') 2 >>> age=(2001,2003,2005,2000) 3 >>> for a,n in zip(name,age): 4 print a,n 5 6 输出: 7 jac

[转]Python零碎知识(2):强大的zip

一.代码引导 首先看这一段代码: 1 >>> name=('jack','beginman','sony','pcky') 2 >>> age=(2001,2003,2005,2000) 3 >>> for a,n in zip(name,age): 4 print a,n 5 6 输出: 7 jack 2001 8 beginman 2003 9 sony 2005 10 pcky 2000 再看这一段代码: 1 all={"jack&qu

python零碎知识点积累

#1.map是3.X中的生成器 #2.建立字典的方法 bob = dict(name='Bob Smith', age=42, pay=3000, job='dev') names = ['name', 'age', 'pay', 'job'] values = ['Sue Jones', 45, 40000, 'hdw'] dict(zip(names,values) fields = ('name', 'age', 'job', 'pay') record = dict.fromkeys(f

python2.7的知识积累

参考http://blog.csdn.net/jcjc918/article/details/9354815 http://blog.sina.com.cn/s/blog_6fb8aa0d0101qtt9.html http://stackoverflow.com/questions/3505831/in-python-how-do-i-convert-a-single-digit-number-into-a-double-digits-string 今天晚上折腾了一下python,主要是去跑通

Python基础知识思维导图|自学Python指南

微信公众号[软件测试大本营]回复"python",获取50本python精华电子书. 测试/开发知识干货,互联网职场,程序员成长崛起,终身学习. 现在最火的编程语言是什么?答案就是Python. 人生苦短,我用Python Python的特点: Python一直是位于编程语言排行榜的前三位, Python遵循"简单.优雅.明确"的设计哲学,语法简单易懂,而且Python的中文文档也于2019年3月份发布,各种开发环境也越来越简单. Python免费开源. Pytho

c/c++面试题(7)零碎知识总结

1.变量的声明和定义有什么区别? 声明:变量的声明做了两件事情 a.告诉编译器这个变量已经匹配到一块内存上了,下面的代码用到的变量或对象是在别处定义的. 声明可以出现很多次. b.告诉编译器这个变量名已经被我占用了,其他的的变量将不能再使用. 定义:告诉编译器创建一个对象,为这个对象分配一块内存并给它取一个名字,这个名字就是常说的 变量名或对象名.同一变量或对象的定义只能出现一次. 本质区别:声明没有分配内存,而定义则是创建了对象并为这个对象分配了一块内存. 2.sizeof和strlen之间的

python基础知识总结

python有段时间没用了,实在是惭愧啊,屌丝今天决定开始对python基础知识重新进行总结,以慰自心. 一.python概念 Python是著名的"龟叔"Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. python定位"优雅","简单","明确" 二.python安装 略 三.python基础 1.数据类型 整数: Python可以处理任意大小的整数,当然包括负整数,在程序

python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding:utf-8from com.wenhy.crawler_baidu_baike import url_manager, html_downloader, html_parser, html_outputer print "爬虫百度百科调度入口" # 创建爬虫类class SpiderMai