python编码技巧-基础篇

备份一下别人总结的常用技巧

1)注释写法:

错误写法:

##texttexttext

正确写法:

# texttexttext

扩展:

(1)注释有单行注释和多行注释。

(2)单行注释以#开头,空一格,然后输入注释内容。

(3)多行注释用三个单引号 ''' 或者三个双引号 """ 将注释内容括起来。

2)文档字符串写法:

错误写法:

def function():
  "say something here!"
  pass

def function():
  'say something here!'
  pass

正确写法:

def function():
  """say something here!
  """
  pass

def function():
  '''say something here!
  '''
  pass

扩展:

(1)在函数体的第一行使用一对三个单引号 ''' 或者一对三个双引号 """ 来定义文档字符串。

(2)用于解释文档程序,帮助你的代码更加简单易懂。

(3)可通过function.__doc__方法来获取文档字符串。

 

3)导入模块格式:

错误格式:

from random import randint

from lib.common.assertUtil import Assert
from lib.base.apiBase import BaseApi
import json

import os

正确格式:

import os
import json

from random import randint
from lib.base.apiBase import BaseApi
from lib.common.assertUtil import Assert

扩展:

(1)直接import的模块写在上面,通过from/import的模块写在下面,中间空一行。

(2)假如import的模块名过长,可以通过as来简化导入的模块名称,如:

from lib.common.assertUtil import Assert as ast

4)function与funciton间的空行:

错误格式:

def function():
    pass


def function():
    pass

正确格式:

def function():
    pass

def function():
    pass

扩展:

(1)pycharm可按option+command+L来自动格式对齐。

 

5)__init__.py文件:

(1)那么如果目录中存在该文件,该目录就会被识别为 module package ,就可以直接进行导入操作,不然会抛出导入失败相关异常。

(2)当用 import 导入该目录时,会执行 __init__.py 里面的代码,所以可以将初始化代码放入该文件中。

2.提高效率的python编码技巧

1)判断方式:

一般方式:

if value=='123':
    return True
else:
    return False

快捷方式:

if value=='123':
    return True
return False
return True if value=='123' else False

扩展:

(1)判断value是否为真或不为空时,可以直接用if value: 来判断;判断为空或为假时,可以直接用if !value:来判断。

value = []
#判断value为空(即长度为0)
if !value:
#判断value不为空(即长度不为0)
if value:

 

2)遍历方式:

一般方式:

values = [1, 2, 3]
value_list = []
for value in values:
    value_list.append(value + 1)

快捷方式:

values = [1, 2, 3]
value_list = [value + 1 for value in values]

扩展:

(1)以上列子可用map()函数来实现(map() 会根据提供的函数对指定序列做映射)。

def add_one(value):
    return value + 1
values = [1, 2, 3]
value_list = map(add_one, values)
注意:Python 2.x 返回列表。Python 3.x 返回迭代器。

 

3)序列化与反序列化:

序列化:

import json

dic = {'1': 1, '2': '2'}
dic_str = json.dumps(dic)

with open('test.json', 'w', encoding='utf-8') as f:
    json.dump(dic, f)

反序列化:

import json

dic_str = "{'1': 1, '2': '2'}"
dic = json.loads(dic)

with open('test.json', 'r', encoding='utf-8') as f:
    dic = json.load(f)

 

4)判断内容格式:

judge_str = '123'
judge_int = 123
judge_list = ['1', '2']
judge_dict = {'1': 1, '2': 2}
isinstance(judge_str, str)
isinstance(judge_int, int)
isinstance(judge_list, list)
isinstance(judge_dict, dict)

返回值是boolean型,为真是返回True,为假时返回False。

 

5)字符串拼接:

obj_str = 'hello' + ' ' + 'world' + str(1)
obj_str = '{0} {1}{2}'.format('hello', 'world', 1)
obj_str = '{first} {second}{third}'.format(first='hello', second='world', third=1)
obj_str = '%s %s%s' % ('hello', 'world', 1)

 

6)获取文件内容或修改文件内容:

一般方式:

f = open('test.txt', 'r')
  print(f.read())
f.close()

f = open('test.txt', 'w')
  f.write("hello")
f.close()

快捷方式:

with open('test.txt', 'r') as f:
      print(f.read())

with open('test.txt', 'w') as f:
      f.write("hello")

扩展:

(1)with...as用法,当with后面的代码块全部被执行完之后,将调用前面返回对象的__exit__()方法,所有要求所求值的对象必须有一个__enter__()方法和一个__exit__()方法。

(2)with...as不仅可用在文件读取,也可用在创建进程/线程等等更多场景。

 

7)方法入参过多或不确定时:

def params(a,b,c,d)
  sum = a + b + c + d 
    
def params_args(*args)
  sum = 0
  for value in args:
        sum += value
        
def params_kwargs(**kwargs):
    sum = kwargs.get('a') + kwargs.get('b') +  kwargs.get('c') +  kwargs.get('d') 
    
def params_args_kwargs(*args, **kwargs):
    sum = 0
  for value in args:
        sum += value
    sum += kwargs.get('a') + kwargs.get('b') +  kwargs.get('c') +  kwargs.get('d') 
    
if __name__ == '__main__':
    params(1, 2, 3, 4)
    params_args(1, 2, 3, 4)
    params_kwargs(a=1, b=2, c=3, d=4)
    params_args_kwargs(1, 2, 3, 4, a=1, b=2, c=3, d=4)

扩展:

(1)*args可以传入列表,元组;**kwargs可以传入字典作为参数。

 

8)字典操作:

一般方式:

obj_dict = {'a': 1, 'b': 2}

#查询
a = obj_dict['a']
a = obj_dict.get('a')
#当执行obj_dict['c']时,查询的key不存在时,程序会抛异常,并且终止程序。
#执行obj_dict.get('c')时,查询的key不存在时,会返回None,程序不会抛异常。

#修改
obj_dict['a'] = 2
obj_dict.update({'a': 2})

#添加
obj_dict['c'] = 3
obj_dict.update({'c': 3})

#删除
obj_dict.pop('a') #返回删除key对应的value
obj_dict.popitem() #删除排序最后一条数据,返回该条数据的key-value元组形式

#获取所有的key
obj_dict.keys()

#获取所有的value
obj_dict.values()

#字典转为列表
list(obj_dict.items()#遍历字典中的key和value
for key, value in obj_dict.items():
    print(key, value)
     
#合并两个字典
obj_dict_b = {'c': 3}
obj_dict.update(obj_dict_b)
     
obj_dict_copy = obj_dict.copy()

 

9)过滤list中的重复值:

一般方式:

obj_list = [1, 2, 3, 4, 4, 3]
obj_list_B = []
for i in obj_list:
    if i not in obj_list_B:
        obj_list_B.append(i)

快捷方式:

obj_list = [1, 2, 3, 4, 4, 3]
obj_list_B = list(set(obj_list))

扩展:

1)当obj_list中元素为str或int时,才可以使用set()方法。

 

10)list排序:

正序:

obj_list = [1, 2, 3, 4, 4, 3]
obj_list.sort()

倒序:

obj_list = [1, 2, 3, 4, 4, 3]
obj_list.sort(reverse=True)

排序翻转:

obj_list = [1, 2, 3, 4, 4, 3]
obj_list.reverse()

扩展:

(1)上面的方法都会直接修改obj_list的值,返回值是None,假如不想修改obj_list的值,建议以下方式:

obj_list = [1, 2, 3, 4, 4, 3]
obj_list_B = obj_list.copy()
obj_list_B.sort()

 

11)路径相关操作:

import os

#当前文件绝对路径
path = os.path.abspath(__file__)

#当前文件所处文件夹目录路径
path = os.path.dirname(os.path.abspath(__file__))

#同级目录下获取别的文件路径
path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'test.txt')

#判断该路径是否存在
os.path.exists(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'test.txt'))

#判断该路径是否是目录
os.path.isdir(os.path.dirname(os.path.abspath(__file__)))
posted @ 2019-06-14 15:12  爱寂寞撒的谎言  阅读(267)  评论(0编辑  收藏  举报