实战blog中的问题--day3 ORM

实战blog中的问题–day3 ORM

标签(空格分隔): 笔记 知识点 ORM


1、 global 全局变量

  变量的作用域在函数内,或者称为是局部变量。如果需要在函数内对全局变量进行修改,而不进行参数调用,那么可以使用全局变量。在函数内部即局部,使用global声明参数,之后就可以调用全局变量。
全局变量不建议常用,如果操作不当,可能会造成参数调用出错。

2、 函数参数:可变参数、关键字参数

  • 可变参数:传入参数除必要参数外,还可以传入不定量个参数,并将这些可变参数在函数调用时自动组合成一个tuple
>>>def fun1(a, *args):
       print(a, args)

>>> fun1(1,2)
>>> 1 (2,)
  • 关键字参数:在必选参数外,还可传入不定数目个关键字参数,函数在调用时,将这些关键字参数组合成一个dict传入函数。
  • 也可以先组成一个dict再传入函数。

  • 如果同时需要传入:必选参数,默认参数,可变参数和关键字参数,必须按照上述顺序传入。

3、 dict 字典
dict中获取成员可以有两种方法:

  • dict[key] :可以获取对应key的值
  • get方法:dict.get(D[,a]),其中[,a]为可选,默认为None,如果dict中存在keyD那么返回对应值,否则返回a对应的值(如果没有a则返回None)。

4、super()函数

http://www.runoob.com/python/python-func-super.html

用于调用父类的一个方法。用来解决多重继承的问题,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。

#!/usr/bin/python
# -*- coding: UTF-8 -*-

class FooParent(object):
    def __init__(self):
        self.parent = 'I\'m the parent.'
        print ('Parent')

    def bar(self,message):
        print ("%s from Parent" % message)

class FooChild(FooParent):
    def __init__(self):
        # super(FooChild,self) 首先找到 FooChild 的父类(就是类 FooParent),然后把类B的对象 FooChild 转换为类 FooParent 的对象
        super(FooChild,self).__init__()    
        print ('Child')

    def bar(self,message):
        super(FooChild, self).bar(message)
        print ('Child bar fuction')
        print (self.parent)

if __name__ == '__main__':
    fooChild = FooChild()
    fooChild.bar('HelloWorld')

执行结果:

Parent
Child
HelloWorld from Parent
Child bar fuction
I'm the parent.

5、classmethod
classmethod 修饰符对应的函数不需要实例化,不需要self参数,但第一个参数需要是表示自身类的cls参数,可以来调用类的属性,类的方法,实例化对象等。

#!/usr/bin/python
# -*- coding: UTF-8 -*-

class A(object):
    bar = 1
    def func1(self):  
        print ('foo') 
    @classmethod
    def func2(cls):
        print ('func2')
        print (cls.bar)
        cls().func1()   # 调用 foo 方法

A.func2()               # 不需要实例化

结果:

func2
1
foo

6、mapping & map
map()方法:

http://www.runoob.com/python/python-func-map.html

map()会根据提供的函数对指定序列做映射,语法:

map(function, iterable, …)

function:函数,有两个参数。
Iterable:一个或多个序列。
返回一个迭代器。

>>>def square(x) :            # 计算平方数
...     return x ** 2
... 
>>> map(square, [1,2,3,4,5])   # 计算列表各个元素的平方
[1, 4, 9, 16, 25]
>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5])  # 使用 lambda 匿名函数
[1, 4, 9, 16, 25]

# 提供了两个列表,对相同位置的列表数据进行相加
>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
[3, 7, 11, 15, 19]

dict的参数mapping

http://www.runoob.com/python/python-func-dict.html

7、mateclass 元类(单独成篇)

https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014319106919344c4ef8b1e04c48778bb45796e0335839000

8、ORM(需要单独写一篇)

https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014319106919344c4ef8b1e04c48778bb45796e0335839000

ORM全称“Object Relational Mapping”,即对象-关系映射,就是把关系数据库的一行映射为一个对象,也就是一个类对应一个表,这样,写代码更简单,不用直接操作SQL语句。
9、 装饰器 (已单独成篇)

https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318435599930270c0381a3b44db991cd6d858064ac0000

10、关系数据库

11、 with
with的方法可以代替try ... finally ...的语句打开文件,而且不必调用f.close()方法:

with open('path') as f:
    for line in f:
        print(line, end="")

12、join()
将序列中的元素,以指定的字符链接生成新字符串。str.join(seq)

\>>> seq = ('a','b','c')
\>>> print(','.join(seq))
\>>> 'a,b,c'

13、yield & coroutine(协程)(单独)

https://www.oschina.net/translate/improve-your-python-yield-and-generators-explained?lang=chs&page=1#

在使用@asyncio.coroutine时需要搭配yield from从协程获取信息。
但是,Python3.5之后可以使用async修饰def而不用装饰器@asyncio.coroutine,那么在获取协程数据时,搭配使用await
具体作用是相同的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值