笔记

变量可以理解为内存中对象的“引用”   》》函数传参 》》类变量和实例变量的使用

动态语言 变量类型不确定 python  / 静态语言 变量在定义时指明类型,赋值时对类型是否匹配进行判断 java c

变量的赋值:a = "ABC"  解释器执行:(1)内存中创建字符串"ABC"(2)内存中创建变量a (3)a指向"ABC"

                      b = "ABC"  解释器执行:(1)内存中创建变量b (2)b指向a所指向的"ABC",与a无关

数据类型:不可修改【数值、布尔、字符串、元组】可修改【列表、字典(键不可修改)、集合等】

                  集合中元素是可迭代对象 s=set(iterable),如字符串、列表、元组、字典。a=set(“abc”) 存为{‘a’,'b','c'},添加单个元素 a.add() 添加多个 a.update()

python 函数的传参 分参数是否是可修改对象。

类变量和实例变量

class Person:
name=[]

p1=Person() 
p2=Person() 
p1.name.append(1)
print(p1.name) # [1] 
print(p2.name) # [1] 
print(Person.name) # [1]

实例方法、静态方法、类方法:

class A(object):
    #实例方法
    def foo(self,x):
        print('foo-',x)
    
    #类方法
    @classmethod
    def class_foo(cls,x):
        print('class-',x)
    #静态方法
    @staticmethod
    def static_foo(x):
        print('static-',x)

a=A()

#实例方法 使用self传递实例 相当于a.foo(a,x) ,只能用实例调用
a.foo(1) #√
A.foo(1) #×
#类方法   使用cls传递类 ,能用 类和实例 调用
a.class_foo(1) #√
A.class_foo(2) #√
#静态方法 不需要传递类或者实例, 能用 类和实例 调用
a.static_foo(4) #√
A.static_foo(4) #√

python自省  运行时知道对象的类型       type() dir() hasattr() getattr() setsattr() isinstance()

type()获取类型

In [27]: type(123)
Out[27]: int

In [28]: type('123')
Out[28]: str

In [29]: type(None)
Out[29]: NoneType

dir()带参数时获取该对象的方法和属性;不带参数时,返回当前范围内的变量、方法和定义的类型列表

dir('ABC')
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

可以直接对象调用方法   'ABC'.__len__()

isinstance()判断是否是某种类型 isinstance('a',str)

In [1]: class Myobject(object):
   ...:     def __init__(self):
   ...:         self.x = 9
   ...:     def power(self):
   ...:         return self.x * self.x
   ...:

In [2]: obj = Myobject()

In [3]: obj.power()
Out[3]: 81

In [4]: hasattr(obj, 'x') # 有属性x么?
Out[4]: True

In [5]: hasattr(obj, 'y') # 有属性y么?
Out[5]: False

In [6]: setattr(obj, 'y') # 设置属性必须有三个参数,少了值
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-6-3b0a0f22117d> in <module>()
----> 1 setattr(obj, 'y')

TypeError: setattr expected 3 arguments, got 2

In [7]: setattr(obj, 'y', 100) # 设置属性y的值为100

In [8]: hasattr(obj, 'y') # 有属性y么?
Out[8]: True

In [9]: getattr(obj, 'y') # 获取属性y!
Out[9]: 100

In [10]: obj.y # 获取属性y
Out[10]: 100

In [11]: obj.x # 获取属性x
Out[11]: 9

python 下划线的含义 

前单 : 该变量或方法仅供内部使用,只作为对程序员的提示;如果是方法名使用前单,该方法不能用 import *导入

后单 : 避免和关键字产生命名冲突 class_

双前 : 名称修饰。解释器会更改变量名,避免子类被扩展时冲突,重写等

双前+双后 : Python保留这种方式用于特殊用途 __init__() ,用户应避免这种命名方式

单下划线 : 仅仅作为一个名字占位,表示该变量是临时的或者无用的。另外 “_”表示解释器评估的最近一个表达式的结果。

参考 : https://blog.csdn.net/tcx1992/article/details/80105645

迭代器(iterator)和可迭代对象(iterable)

能用于for循环(集合数据类型 list tuple dict set str)的都是可迭代对象;

能调用next()函数的都是迭代器,迭代器是惰性序列,即只通过next调用,要求返回下一个数据时才会计算

list、str、tuple等都是可迭代对象,不是迭代器,可通过iter([])变为迭代器

可用isinstance判断是否迭代器、可迭代对象。isinstance([],Iterable),isinstance([],Iterator)

生成器(generator)

列表生成式可以直接创建列表,直接全部生成,占用较大的内存空间,且列表的容量一定是有限的,所以,如果列表的元素可以按照某种算法推算出来,在循环时再不断推算,不必创建完整的列表。

一边循环一边计算的机制叫做 生成器。

生成器创建(1) 用()代替生成式中的[] 如 gn = (x*x for x in list)  调用时实际是用gn.next(),但应用中用for循环来简化操作 for c n gn

(2)函数中的print换成yield,包含关键字yield的函数是generator,调用next时执行,遇到yield返回,中止,再次调用nextt执行时从上次中断的yied处继续运行。for n in fib(6):print n

函数参数:默认参数、可变参数*a、关键字参数**a

默认参数:必选参数在前,默认参数在后;多个参数时,变化大的参数放在前面;在有多个默认参数时,调用时可按照定义顺序提供默认参数,不按顺序时,需要写参数名(city = tj);默认参数必须指向不变对象。

可变参数:可变参数即传入的参数个数是可变的,0个或多个,在调用时函数内部会把参数组装成tuple,def calc(*num)

,如果想传入的不是单独的参数,而是封装在list或tuple内的参数则在其前面加*即可。n=[1,2,3],calc

(*num)

关键字参数:与可变参数相同的在于都可以传递0个或多个参数,但关键字参数必须含有参数名;关键字参数在函数内部被封装成一个dict。可用于注册需求的某些可选项。如果参数本来就被封装在dict里,则def calc(**dictname)

参数定义顺序:必选参数、可选参数、可变参数、关键字参数。func(*args,**kw)

AOP aspect orient process 面向切面编程。切面代表的是一个普遍存在的共有功能,如日至切面、权限切面、食物切面等。将业务逻辑代码和共有代码分开存放,维护简单。

装饰器就是为了解决这类事情

引用和copy(),deepcopy()的区别:https://blog.csdn.net/u011630575/article/details/78604226

is 和 ==https://www.cnblogs.com/kiko0o0/p/8135184.html

read readlines readline:

  • read 读取整个文件
  • readline 读取下一行,使用生成器方法
  • readlines 读取整个文件到一个迭代器以供我们遍历

map(函数名,可迭代对象) 把函数作用于可迭代对象的每一个元素上,生成一个迭代器,是惰性序列,因此可以用list()都求出来。

reduce(函数名,[序列]),函数必须接受两个参数,把结果再和下一个参数送入函数中。

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

python中认为以下值为假 False:False None 0 '' () [] {} 空和0都认为是false

filter(函数名,序列),把函数作用于每一个元素,返回值为true的留下,false的丢掉。也是生成惰性序列

sorted([序列],key=函数名,reverse=True)默认是升序排列,reverse为true降序排列。

匿名函数 lambda x输入参数  : 只有一个表达式,返回值为表达式结果

get 和 post

GET请求会显示请求指定的资源。一般来说GET方法应该只用于数据的读取,请求指定的页面信息,并返回响应主体,GET被认为是不安全的方法。

POST请求会 向指定资源提交数据,请求服务器进行处理,如:表单数据提交、文件上传等,请求数据会被包含在请求体中。POST方法是非幂等的方法,因为这个请求可能会创建新的资源或/和修改现有资源

AJAX,Asynchronous JavaScript and XML(异步的 JavaScript 和 XML), 是与在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术

http提交请求到响应的过程:https://www.cnblogs.com/xuxinstyle/p/9382506.html

域名解析--发起tcp的三次握手-建立tcp连接后发起http请求--服务器响应http请求,浏览器收到html代码--浏览器解析html代码并请求代码中的资源(js、css、图片等)--浏览器对页面进行渲染呈现给用户。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值