[学习总结] python语言学习总结 (一)

用py也很久了,很多东西只知道拿来用,并没有深究,感觉这样是不够的。

我决定写这么一篇总结,把很多遗忘的东西拾起来,把很多没搞懂的东西搞清楚。

1.eval函数

用法:eval(expression, globals=None, locals=None)

解释:将字符串str当成有效的表达式来求值并返回计算结果。

就是可以将字符串转换为表达式来运行,当然可以转换为某个函数执行。
python是用命名空间来记录变量的轨迹的,命名空间是一个dictionary,键是变量名,值是变量值。
当一行代码要使用变量 x 的值时,Python 会到所有可用的名字空间去查找变量,按照如下顺序:
1)局部名字空间 - 特指当前函数或类的方法。如果函数定义了一个局部变量 x, 或一个参数 x,Python 将使用它,然后停止搜索。
2)全局名字空间 - 特指当前的模块。如果模块定义了一个名为 x 的变量,函数或类,Python 将使用它然后停止搜索。
3)内置名字空间 - 对每个模块都是全局的。作为最后的尝试,Python 将假设 x 是内置函数或变量。
python的全局名字空间存储在一个叫globals()的dict对象中;局部名字空间存储在一个叫locals()的dict对象中。我们可以用print (locals())来查看该函数体内的所有变量名和变量值。
 

使用:

a = 1
b = 1
val1 = a + b
val2 = eval("a+b")
def f():
    a = 10
    b = 10
    val3 = eval("a+b",globals())
    val4 = eval("a+b")
    return val3,val4
print(val1,val2,f())
 
#2 2 (2, 20)

2.sort sorted高级用法 

只要是可迭代对象数据,都能够进行排序,生成一个排序后的列表。
list.sort()函数会对list进行排序操作,改变原有list;而sorted(list)之后会返回一个copy,不会对原来的list有影响。

sorted(iterable, key=None, reverse=False)

list.sort(iterable, key=None, reverse=False)

两者参数一模一样,因此用代码加以区分:

a = [1,5,3,9,7]
b = [9,3,7,2,6]
print(a.sort())
print(a)
print(sorted(b))
print(b)

#None
#[1, 3, 5, 7, 9]
#[2, 3, 6, 7, 9]
#[9, 3, 7, 2, 6]

3.split 用法 

Python中有split()和os.path.split()两个函数,具体作用如下:

split():拆分字符串。通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list)

os.path.split():按照路径将文件名和路径分割开

str.split(str="",num=string.count(str))[n]

str:分隔符,默认为空格,但是不能为空'',如果没有分隔符,就把整个字符串作为列表的第一个元素。
num:分割次数。
[n]:取第n个分片。

使用:

str = "http://cnblogs.com/aoru45"
val1 = str.split()
val2 = str.split("/")
val3 = str.split("/",2)
val4 = str.split("/",2)[0]
print(val1,val2,val3,val4) #['http://cnblogs.com/aoru45'] ['http:', '', 'cnblogs.com', 'aoru45'] ['http:', '', 'cnblogs.com/aoru45'] http:

4.list各种操作和操作的时间复杂度 

Operation

Average Case

Amortized Worst Case

Copy

O(n)

O(n)

Append[1]

O(1)

O(1)

Pop last

O(1)

O(1)

Pop intermediate

O(k)

O(k)

Insert

O(n)

O(n)

Get Item

O(1)

O(1)

Set Item

O(1)

O(1)

Delete Item

O(n)

O(n)

Iteration

O(n)

O(n)

Get Slice

O(k)

O(k)

Del Slice

O(n)

O(n)

Set Slice

O(k+n)

O(k+n)

Extend[1]

O(k)

O(k)

Sort

O(n log n)

O(n log n)

Multiply

O(nk)

O(nk)

x in s

O(n)

 

min(s), max(s)

O(n)

 

Get Length

O(1)

O(1)

 

5.help函数的使用 

使用help()可以帮助我们迅速了解某个函数的作用。同时呢,当我们定义某个函数的时候,我们也一样可以写一些帮助方便别人理解。
当我输入help(print)的时候呢,终端会返回:

Help on built-in function print in module builtins:

print(...)
    print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)

    Prints the values to a stream, or to sys.stdout by default.
    Optional keyword arguments:
    file:  a file-like object (stream); defaults to the current sys.stdout.
    sep:   string inserted between values, default a space.
    end:   string appended after the last value, default a newline.
    flush: whether to forcibly flush the stream.

我们便可以看到print函数的说明和参数情况。
当我们自己定义函数的时候呢,我们可以这样:

def f(int a):
    '''this is a function that returns a+1'''
    return a+1
help(f)
#会输出
#Help on function f in module __main__:
#f(a=0)
#    this is a function that returns a+1

6. = copy.copy copy.deepcopy区别

copy和deepcopy都能实现拷贝的操作,不同的是,copy拷贝的过程中不会创建新空间,看下面的例子,b使用copy拷贝了a,当a的2改为99的时候,b的值也改变了,但是为什么a添加[7,8,9]的时候,b没有添加呢,原来,b拷贝的只是a原有的list中的两个地址,当a添加一个元素的时候呢,相当于加了一个地址,而在b中没拷贝,所以b还是不添加元素。c是deepcopy来的,完全是一个新变量,a的任何变化都不能影响c的变化。

import copy
a = [[1,2,3],[4,5,6]]
b = copy.copy(a)
c = copy.deepcopy(a)
a.append([7,8,9])
a[0][1] = 99
print(a)
print(b)
print(c)

'''
[[1, 99, 3], [4, 5, 6], [7, 8, 9]]
[[1, 99, 3], [4, 5, 6]]
[[1, 2, 3], [4, 5, 6]]
'''

7.*l 函数接受任意个数参数 **kw 函数接受任意个关键字参数

在python中,使用*可以接受任意个数的参数,而使用**可以接受任意个数的关键字参数。

def a(*l):
    result = 0
    for val in l:
        result = result + val
    return result
def b(**kw):
    result = 0
    result = kw["keyword_1"]+kw["keyword_2"]
    return result
print(a(1,2,3,4,5))
print(a(1,2,3))
print(b(keyword_1 = 10,keyword_2=20))

'''
15
6
30
'''

参考:

1.python eval() https://www.cnblogs.com/dadadechengzi/p/6149930.html

2.Python 内置函数sorted()在高级用法 https://www.cnblogs.com/brad1994/p/6697196.html

3.Python中的split()函数的用法 https://www.cnblogs.com/hjhsysu/p/5700347.html

4.list各种操作和操作的时间复杂度 https://wiki.python.org/moin/TimeComplexity

猜你喜欢

转载自www.cnblogs.com/aoru45/p/9894770.html