使用python的一些笔记

语法

传值与传引用

Python参数传递采用的是“传对象引用”的方式。这种方式相当于传值和传引用的一种综合。

  • 如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象。
  • 如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象--相当于通过“传值'来传递对象。

数组

数组合并

不能直接使用append函数直接赋值,因为该函数无返回值,可直接用 + 合并两个数组

判断相同和不同数目

#接口返回值
list1 = ['张三', '李四', '王五', '老二']
#数据库返回值
list2 = ['张三', '李四', '老二', '王七']
 
a = [x for x in list1 if x in list2] #两个列表表都存在
b = [y for y in (list1 + list2) if y not in c] #两个列表中的不同元素
 
print('a的值为:',a)
print('b的值为:',b)
 
c = [x for x in list1 if x not in list2]  #在list1列表中而不在list2列表中
d = [y for y in list2 if y not in list1]  #在list2列表中而不在list1列表中
print('c的值为:',c)
print('d的值为:',d)

out:
a的值为: ['张三', '李四', '老二']
b的值为: ['王五', '王七']
c的值为: ['王五']
d的值为: ['王七']

排序

排序指南

对于具有命名属性的对象:

>>> student_tuples = [
...     ('john', 'A', 15),
...     ('jane', 'B', 12),
...     ('dave', 'B', 10),
... ]
>>> sorted(student_tuples, key=lambda student: student[2])   # sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

字典排序

参考

  1. sorted函数
    首先介绍sorted函数,sorted(iterable,key,reverse),sorted一共有iterable,key,reverse这三个参数。

其中iterable表示可以迭代的对象,例如可以是dict.items()、dict.keys()等,key是一个函数,用来选取参与比较的元素,reverse则是用来指定排序是倒序还是顺序,reverse=true则是倒序(从大到小),reverse=false则是顺序(从小到大),默认是reverse=false。

  1. 按照key排序
    要对字典按照key排序,可以直接调用sorted函数。
my_dict = {'lilee':25, 'age':24, 'phone':12}
sorted(my_dict.keys())
输出结果为

['age', 'lilee', 'phone']

直接使用sorted(my_dict.keys())就能按key值对字典排序,这里是按照顺序对key值进行排序的,如果想按照倒序排序的话,只需要将reverse置为true即可。

sorted(my_dcit.keys(), reverse = true)
  1. 按照value值排序
    共有三种方法可以实现将字典按照value值进行排序

(1)key使用lambda匿名函数取value进行排序

d = {'lilee':25, 'wangyan':21, 'liqun':32, 'age':19}
sorted(d.items(), key=lambda item:item[1])
输出结果为
[('age',19),('wangyan',21),('lilee',25),('liqun',32)]

如果需要倒序则
sorted(d.items(), key=lambda item:item[1], reverse=True)
得到的结果就会是
[('liqun',32),('lilee',25),('wangyan',21),(age',19)]

(2)使用operator的itemgetter进行排序

import operator
sorted(d.items(), key=operator.itemgetter(1))
输出结果为

[('age',19),('wangyan',21),('lilee',25),('liqun',32)]

is和==的区别

https://www.cnblogs.com/wangkun122/p/9082088.html

is和==都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同。下面来看看具体区别在哪。

==比较操作符和is同一性运算符区别

==是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等,例如下面两个字符串间的比较:

例1.

>>> a = 'cheesezh'
>>> b = 'cheesezh'
>>> a == b
True

is也被叫做同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同。通过对下面几个list间的比较,你就会明白is同一性运算符的工作原理:

例2.

>>> x = y = [4,5,6]
>>> z = [4,5,6]
>>> x == y
True
>>> x == z
True
>>> x is y
True
>>> x is z
False
>>>
>>> print id(x)
3075326572
>>> print id(y)
3075326572
>>> print id(z)
3075328140

只有数值型和字符串型的情况下,a is b才为True,当a和b是tuple,list,dict或set型时,a is b为False

后台

requiremnets.txt

pip freeze > requirements.txt //生成
pip install -r requirements.txt //安装

用 r取消转义

虚拟环境创建与激活

pip3 install virtualenv
virtualenv venv
source venv/bin/activate
pip install -r requirements.txt

单元测试

import unittest

class MyTest(unittest.TestCase):  # 继承unittest.TestCase
    def tearDown(self):
        # 每个测试用例执行之后做操作
        print('111')

def setUp(self):
    # 每个测试用例执行之前做操作
    print('22222')

@classmethod
def tearDownClass(self):
# 必须使用 @ classmethod装饰器, 所有test运行完后运行一次
     print('4444444')
@classmethod
def setUpClass(self):
# 必须使用@classmethod 装饰器,所有test运行前运行一次
    print('33333')

def test_a_run(self):
    self.assertEqual(1, 1)  # 测试用例
    
def test_b_run(self):
    self.assertEqual(2, 2)  # 测试用例
    
if __name__ == '__main__':
    unittest.main()#运行所有的测试用例

json 错误xx is not JSON serializable

在使用json的时候经常会遇到xxx is not JSON serializable,也就是无法序列化某些对象

重写jsonEncoder

import  decimal
class DecimalEncoder(json.JSONEncoder):
    def default(self, o):
        if isinstance(o, decimal.Decimal):
            return float(o)
        super(DecimalEncoder, self).default(o)

# and then:
json.dumps(chart_list,..., cls=DecimalEncoder)

运行Jupyter Notebook

jupyter notebook --ip=0.0.0.0 --no-browser --allow-root

你可能感兴趣的:(使用python的一些笔记)