python查漏补缺

python查漏补缺

理论上的东西

  • 脚本语言一般都是不需要编译的,是解释型语言。python则__需要编译__:会将脚本语言编译成字节码的形式。

  • Jython:用Java编写的Python,可以使用Java中的链接库。CPython是现在用的Python。

  • Python for .Net:.Net使用的是XML Web Services。 Python for .NetIronPython是.net平台上的python。

vim和Emacs(不学习)

注释与断行

大段注释 ‘’’ 或者 “”“ 包裹内容。(三个单引号或者三个双引号)

同一句中可以用;来将语句分割。

字符串

‘’‘(三引号)可以包括大段字符串。

  • str.isalnum() 0-9 a-z A-Z

  • str.find() 找到起始位置

  • 切片[a,b] 不包含b

  • 原始字符串 r or R开头,转义字符不再起作用。

列表和元组

  • list.extend(L) 把L追加在list上
  • list.index() 找元素的下标
  • list.reverse() 翻转链表
  • 元组:用()创建,一旦创建,数据类型就不可改变。
  • 列表:[], 字典{}

函数参数

  • 常规用法
def count(x=5):
    return x ** 3
def count(x=None, y=None, z=None):
    if(x == None):
        x = 1
    if(y == None):
        y = 2
    if(z == None):
        z = 5
    return x * y * z

这样调用函数 count( , ,7)时不会报错,否则是会报错的。

还可以按参数名传递参数

count(y=3,z=5,x=1)

不必按照顺序

count(x=5,y=5,1)

是错误的

如果按照参数传递,可以不写判断语句,写判断语句更符合规范。

  • 传递任意数量的参数:在参数名前加一个星号,表示可变参数:
def myListAppend(*list):
	l = []
    for i in list:
        l.extend(i)
    return l
a = [1,2,3]
b = [4,5,6]
c = [7,8,9]
myListAppend(a,b)
  • 用函数改变参数的值:精髓在于用列表传值。不需要像c语言一样用指针。
def fakeChangeNum(x):
    x = x * 2
    
def realChangeNum(x[0]):
    x[0] = x[0] * 2

第二种会改变真实参数值

  • 变量的作用域

内置作用域(python预先定制)、全局作用域、局部作用域。

全局作用域:加global

global a

没有块作用域。

块作用域是C\C++\JAVA中有的

int a = 0;
for (int i = 0;i < 10;i++)
{
	int b = i;
	b++;
	a += b;
}

其中b的作用域就是块作用域

使用Lambda表达式定义函数

lambda来源于LISP语言,可以用于定义匿名函数。

lambda 参数列表:表达式
>>> fun = lambda x: x * x - x
>>> fun(3)
6
>>> fun
<function <lambda> at 0x01000000>

Lambda仅能含有单一表达式,不能包含其他语句。可以调用别的函数。

!! 不可以在里面使用print语句和其他语句(if之类的)

  • 三目运算符的写法
x = int(input("输入第一个数:"))
y = int(input("输入第二个数:"))
z = int(input("输入第三个数:"))

#三目运算符的第一种写法
print((x if (x>y) else y) if ((x if (x>y) else y)>z) else z)
#三目运算符的第二种写法
a=(x if (x>y) else y)
print(a if (a>z) else z)

模块

  • 导入方式

import导入是导入的整个模块,from导入是导入了模块中的某个函数。

from xxx import *

导入xxx中的所有函数,调用比较方便

可以直接用名字

  • python查找模块

先从当前目录找,找不到会从sys中的path找。可以添加路径

  • 是否需要编译模块

对于模块,python总会在第一次调用后就将其编译成字节码的形式,以提高脚本的运行速度。

__ pycache __ 文件夹中有一个mymodule.cpython-36.pyc文件。 是将mymodule文件编译成字节码的文件。

导入模块时会查找模块的字节码文件,如果存在,则将编译后的模块的修改时间同模块的修改时间比较。如果不相同,会重新编译模块。

对于非模块的脚本,Python不会在运行脚本后将其编译成字节码的形式。可以使用py_compile

#file:compile.py
import py_compile
py_compile.compile('usermodule.py', "usermodule.pyc")

可以使用-O和-OO进行优化,-OO易出问题,但是优化的较多。

python -O compile.py
python -OO compile.py
  • 模块独立运行

python通过对__ name __属性值的判断,可以让脚本在导入和独立运行时都可以正常运行。

if __name__ == '__main__':
    ***
  • 获得模块方法名
dir(sys) #sys是模块名
dir() #默认所有
  • 用包管理模块

包可以看作处于同一目录中的模块,组成如下

img

断,可以让脚本在导入和独立运行时都可以正常运行。

if __name__ == '__main__':
    ***
  • 获得模块方法名
dir(sys) #sys是模块名
dir() #默认所有
  • 用包管理模块

包可以看作处于同一目录中的模块,组成如下

[外链图片转存中…(img-nvxfxifw-1598776680575)]

__init__主要作用是设置__all__变量。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值