python技巧分享(七)

26 Feb 2018 python技巧分享(七)

这是一个系列文章,主要分享python的使用建议和技巧,每次分享3点,希望你能有所收获。

1 is 和 == 的区别

import os

str1 = os.__name__
str2 = "os"

print str1
# os
print str2
# os

print str1 == str2
# True

print str1 is str2
# False

由示例中可以看到,str1和str2的值都是字符串”os”,str1 == str2为True,但是str1 is str2却为False,即is和==不是一回事,is为True表示两个对象的id相同,即id(str1) == id(str2)时,str1 is str2才为True,is表示2个对象引用同一块内存内容,==表示2个对象的值相等。所以判断2个对象值是否相等时,使用==,判断2个对象是否引用同一块内存时,使用is。如果将上面示例中的str1 = os.__name__修改成str1 = “os”,你会发现str1 is str2为True,这是python为了性能考虑,将str1和str2都指向同一块内存,内存的值就是字符串”os”,所以导致str1 is str2为True,如下:

str1 = "os"
str2 = "os"

print str1
# os

print str2
# os

print str1 == str2
# True

print str1 is str2
# True

print id(str1) == id(str2)
# True

print id(str1)
# 31301840

print id(str2)
# 31301840

2 通过下划线_丢弃多余的返回值

  • 不推荐方式
def demo():
    return 0, 1, 2


multi_values = demo()

print multi_values[1]
# 1
  • 推荐方式
def demo():
    return 0, 1, 2


_, one, _ = demo()

print one
# 1

前一种方式将返回的多个值以元组的形式保存在变量multi_values中,然后读取第二个值,后一种方式中,通过下划线方式,丢弃多余的函数返回值,更加简洁易读。

3 如何判断文件是否被打开

with open("tmp") as f:
    print f.closed
    for line in f.readlines():
        print line

print f.closed

'''
False
line 1

line 2

line 3
True
'''

由示例中可以看到,使用with方式打开文件,文件在with语句块范围外会自动关闭。第一个print打印False,文件处于打开状态,第二个print在with语句的范围外,打印True,表明文件处于关闭状态。

LEo at 20:04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏林德熙的博客

C# const 和 readonly 有什么区别

在写常量的时候,是选择使用 const 还是 static readonly 是一个让人难以决定的问题,本文告诉大家这两个方法的区别。

1112
来自专栏海天一树

小朋友学Java(5):静态方法

先编写程序: class Demo { public void fun1() { System.out.println("Hello")...

2876
来自专栏java学习

Java基础总结大全(1)

一、基础知识: 1、JVM、JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性。 ...

42311
来自专栏java学习

Java基础总结大全(1)

一、基础知识: 1、JVM、JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性。 ...

3695
来自专栏知识分享

关于函数指针--简介

函数指针说白了,,,,函数的地址 现在看一个简单的--先定义一个函数指针 void (*f1)();就是这样定义--指向的是一个void类型的 假设定义了另一个...

2988
来自专栏魂祭心

原 Curry的js实现

3575
来自专栏海天一树

小朋友学Python(3):布尔类型

本节讲解C/C++/Java/Python中的布尔类型。 一、C语言 C语言中没有布尔类型,判断时 ,0为假,非0为真。 二、C++ C++的bool是布尔类型...

29511
来自专栏PHP在线

php

单例设计模式 1.控制一个类只能创建一个对象,设置构造函数为私有的。 2.设置静态方法调用类中方法返回实例化。 3.在类中设置静态属性存放实例化对象。 ? 命名...

3337
来自专栏zhangdd.com

nginx location匹配规则

~      #波浪线表示执行一个正则匹配,区分大小写 ~*    #表示执行一个正则匹配,不区分大小写 ^~    #^~表示普通字符匹配,如果该选项匹配...

1114
来自专栏大闲人柴毛毛

三分钟理解“模板方法模式”——设计模式轻松掌握

模板方法模式的官方定义: 在模板方法模式中,只定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定...

36910

扫码关注云+社区

领取腾讯云代金券