• Python对象的深拷贝与浅拷贝

    本文内容是在《Python核心编程2》上看到的,感觉很有用便写出来,给大家参考参考!

    浅拷贝

    首先我们使用两种方式来拷贝对象,一种是切片,另外一种是工厂方法。然后使用id函数来看看它们的标示符

    # encoding=UTF-8
     
    obj = ['name',['age',18]]
    a = obj[:]
    b = list(obj)
    for x in obj,a,b:
      print id(x)
    

    Output:

    35217032
    35227912
    29943304
    

    他们的id都不同,按照正常的判断,三个不同id的对象应该都是独立的。那么我们先给他们改改名看看

    ...

    READ ALL

  • SQL计算排名

    通常我们读取排行榜的时候很容易,直接按照字段倒叙查询出来就好,但如果要取得某条记录的排名,需要动下脑筋,因为MySQL本身不能算出这样的需求,需要变动一下即可算出记录在表中的名次。

    比如有一个表:

    mysql> desc c;
    +-------+---------+------+-----+---------+----------------+
    | Field | Type    | Null | Key | Default | Extra          |
    +-------+---------+------+-----+---------+----------------+
    | id    | int(10) | NO   | PRI | NULL    | auto_increment |
    | fen   | int(10) | NO   |     | NULL    |                |
    +-------+---------+------+-----+---------+----------------+
    2 rows in set (0.01 sec)
     
    mysql> select * from c;
    +----+------+
    | id | fen  |
    +----+------+
    |  1 |  300 |
    |  2 |  200 |
    |  3 |  500 |
    |  4 |  600 |
    |  5 |  800 |
    |  6 | 1000 |
    |  7 |  200 |
    |  8 |  400 |
    |  9 |  700 |
    | 10 |  600 |
    | 11 |  100 |
    +----+------+
    11 rows in set (0.00 sec)
     
    mysql> 
    

    ...

    READ ALL

  • Python如何声明只有一个元素的元祖

    调试程序的时候,就吃过这个亏,不知道为何Python使用括号做元祖声明边界符,估计是找不到合适的符号了。中括号用来声明列表,花括号用来声明字典,元祖号只能用括号来声明了。有编程经历的朋友都清楚括号在其它语言里都是表示优先级,而Python也可以用来表示优先级,所以也就引发了以下白痴的问题

    # encoding=UTF-8
     
    obj = ('tuple')
     
    print obj
    print type(obj)
    print len(obj)
    

    Output:

    tuple
    <type 'str'>
    5
    

    我本来是想声明只有一个元素的元祖,而Python估计以为你只是声明一个字符串所以结果以obj变量就变成元祖了。这个错误非常隐形,不好调试

    ...

    READ ALL

  • Linux防火墙指定端口范围

    通常我们设置防火墙的时候都是以限定单个端口访问为目的,然而有时候这样显的有点麻烦。比如有这样一个需求,我需要700至800之间的端口都能tcp访问,总不能在iptables里添加八百条

    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 700 -j ACCEPT
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 701 -j ACCEPT
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 702 -j ACCEPT
    ...
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 800 -j ACCEPT
    

    ...

    READ ALL

  • PHP如何读取照片的Exif信息

    什么是Exif

    Exif是一种图象文件格式,它的数据存储与JPEG格式是完全相同的。实际上Exif格式就是在JPEG格式头部插入了数码照片的信息,包括拍摄时的光圈、快门、白平衡、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、色彩编码、拍摄时录制的声音以及全球定位系统(GPS)、缩略图等。简单地说,Exif=JPEG+拍摄参数。因此,你可以利用任何可以查看JPEG文件的看图软件浏览Exif格式的照片,但并不是所有的图形程序都能处理Exif信息。

    例子

    读取照片的Exif在很多时候都没有必要,但相对于一些探讨摄影技术的站点,那么读取照片的Exif信息就显得尤为重要了,比如摄影论坛蜂鸟。

    ...

    READ ALL

  • Linux通过进程名字杀掉进程

    有时候要杀掉一个进程,但需要事先知道PID,于是现用ps -le | grep process_name找出PID,然后再通过kill命令杀掉

    利用这一段可以找出nginx的PID

    [root@test01 ~]# ps aux | grep -w nginx | grep -v grep | awk '{print $2}'
    1279
    13108
    13109
    30629
    30650
    

    配合kill命令可以写成一行

    kill `ps aux | grep -w nginx | grep -v grep | awk '{print $2}'`
    

    ...

    READ ALL

  • JavaScript setTimeout

    JavaScript是一门单线程语言,UI渲染,脚本执行都使用同一个线程。

    setTimeout是很多人喜欢用的延迟执行函数,如

    setTimeout(function() {
      console.log('Hello World');
    }, 3000);
    

    我们会认为程序在三秒后执行Hello World,但实际上又可能会超出三秒,并且时间不固定。前面说了,JavaScript是单线程,所有异步执行的函数都会被压入一个Event Table,只有主线程空闲的时候才会从Event Table取出函数执行,Event Queue是一个list,每次主线程空闲就从Event Queue里取出第一个函数执行

    ...

    READ ALL

  • C实现斐波那契

    JavaScript, Golang, Python和PHP实现的都写过了,今天用C再来一下

    什么是斐波那契

    斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........
    这个数列从第3项开始,每一项都等于前两项之和

    代码实现

    #include <stdio.h>
    
    int a = 0;
    int b = 0;
    int tmp;
    
    int fibonacci() {
      if (a == 0) {
        a = 1;
      } else {
        tmp = a;
        a = a + b;
        b = tmp;
      }
    
      return a;
    }
    
    int main() {
      int i;
    
      for (i = 0; i < 10; i++) {
        printf("%d ", fibonacci());
      }
      return 0;
    }
    

    ...

    READ ALL

  • 公交车上丢手机了!

    带着两袋行李上车后,一只手抓着行李厢,另一只手抓扶手。到站后,欲下车,发现门口堵着一死胖子。

    我正要从他左边穿过,他顺势堵到左边。以为他不下车于是准备从右边下车,他又堵到右边。当时正急着下车,没顾上左右看又到左边去准备从左边下车,谁知那死胖子又堵了过来。

    正感觉奇怪时,胖子下车了,下车后胖子往右边走我往左边走,因为胖子堵了我好几个回合才下车,觉得有点奇怪便回头看了胖子几眼。发现胖子居然边走边回头看,可惜当时我没发现手机丢了。当我们走远了以后摸摸牛仔裤的右前兜发现手机不见了,回想起公交车上胖子堵我那一会儿,我真笨啊!

    ...

    READ ALL

  • Golang变通实现class类

    Go里没有class关键字,一切一切都是函数,这也是我非常喜欢的编程方式。

    package main
    
    import "fmt"
    
    func main() {
      b := sum(5, 7)
      fmt.Println(b)
    }
    
    func sum(a int, b int) int {
      return a + b
    }
    

    如果你非得想使用类的方式来编程,可以这么干

    package main
    
    import "fmt"
    
    type Utility struct {}
    
    func (u *Utility) sum(a int, b int) int {
      return a + b
    }
    
    func main() {
      u := &Utility{}
    
      b := u.sum(5, 7)
      fmt.Println(b)
    }
    

    ...

    READ ALL