自由式学习
992人加入学习
(0人评价)
Python基础知识-pycharm版
价格 免费
承诺服务
该课程属于 1443-李同学-算法方向-计算机视觉-就业:是 请加入后再学习

### 浅拷贝和深拷贝

浅拷贝:不拷贝对象的内容,只拷贝子对象的引用

深拷贝:会连子对象的内容也全部拷贝一份,对子对象的修改不会影响源对象

#测试浅拷贝和深拷贝

import copy
a=[10,20,[5,6]]
b=copy.copy(a)

print("a:",a)
print("b:",b)

b.append(30)
b[2].append(7)
print("浅拷贝。。。")
print("a:",a)
print("b:",b)

运行结果:

a: [10, 20, [5, 6]]
b: [10, 20, [5, 6]]
浅拷贝。。。
a: [10, 20, [5, 6, 7]]
b: [10, 20, [5, 6, 7], 30]

 

[展开全文]

2.传递把不可变对象

不可变对象有字符串,数字,元组,function

传递不可变对象时,发生的运行逻辑,由于原对象不可变,会产生一个新的对象

[展开全文]

### 参数的传递

1.对可变对象进行写操作

a=[10,20]

print(id(a))
print(a)
def test01(m):
    print(id(m))
    m.append(300)
    print(id(m))

test01(a)
print(a)
[展开全文]

1.全局变量应尽量避免使用

2.局部比全局变量快

3.局部变量和全局变量一样是,系统自动使用局部变量

4.局部变量通过产生栈帧临时保存地址

5.在函数中用golbal声明,则局部变量变为全局变量

[展开全文]

返回值

1.默认返回None

2.结束函数运行

[展开全文]

printMax(a,b):

形参,在定义时使用

实参,在调用时会用

1.括号内是形参列表,有多个参数要用逗号隔开

2.形参不需要声明类型,也不需要指定函数返回值类型

3.无参数,也必须保留空的圆括号

4.实参列表必须与形参列表一一对应

 

[展开全文]
import turtle

t=turtle.Pen()

t.circle(50)
t.penup()
t.goto(0,-50)
t.pendown()
t.circle(100)
t.penup()
t.goto(0,-100)
t.pendown()
t.circle(150)
turtle.done()
[展开全文]

###  推导式创建序列

#### 列表推导式

[表达式 for item in 可迭代对象]

或者:{表达式 for item in 可迭代对象 if 条件判断}

也可以两个循环

```python

例子1:

y=[x*2 for x in range(1,50) if x%5==0]
print(y)

例子2:

cells=[(a,b) for a in range(1,10) for b in range(1,10)]
print(cells)

```

#### 字典推导式

{key_expression : value_expression for 表达式 in 可迭代对象}

```python

my_text="i love you,i love sxt,i love gaoqi"
char_count={c:my_text.count(c) for c in my_text}#count()表示字符出现的次数
print(char_count)

```

#### 集合推导式

```python

b={x for x in range(1,100) if x%9==0}
print(b)

```

#### 生成器推导式

一个生成器只能运行一次,迭代第一次后,再迭代就没有数据了

```python

a=(x for x in range(4))
print(tuple(a))#tuple是生成元组的意思

```

 

[展开全文]

### 循环代码的优化

原则:

1.尽量减少不必要的计算

2.尽可能把东西往循环外面放

3.尽量使用局部变量

```python

import time

start=time.time()
for i in range(3000):
    result=[]
    for m in range(10000):
        result.append(i*1000+m*100)
end=time.time()
print("耗时:{0}".format(end-start))


start2=time.time()
for i in range(3000):
    result=[]
    c=i*1000
    for m in range(10000):
        result.append(c+m*100)
end2=time.time()
print("耗时:{0}".format(end2-start2))

```

### 其他优化手段

1.连接多个字符,使用join()而不使用+

2.列表进行元素插入和删除,尽量在列表尾部操作

3.zip()

[展开全文]

浅拷贝 copy :不拷贝子对象的内容,只拷贝子对象的引用。

 

深拷贝 deepcopy :连子对象的内存也全部拷贝一份,对子对象的修改不会影响源对象。

[展开全文]

int float 字符串 元组 布尔值

传递参数是不可变对象时,实际也是传递的对对象的引用,但是因为不可变对象不可修改,所以系统创建新的对象。

[展开全文]

可变对象:字典、列表、集合、自定义的对象

不可变对象:数字、字符串、元组、function等

可变对象进行更改时,不创建对象拷贝,直接修改这个对象。

[展开全文]

函数内的局部变量可以和全局变量重名,只要不进行global申明,就是局部变量。

打印输出全部的局部变量 print(locals())

打印输出全部的全局变量 print(globals())

[展开全文]

推导式

1、列表推导式

>>>[x for x in range(1,5)]

[1,2,3,4]

>>>[x for x in range(1,20) if(x%5==0)]

2、字典推导式

{key:value for 表达式 in 迭代对象}

3、集合推导式

{key  for 表达式 in 迭代对象}

4、生成器推导式 生成元组

一个生成器只能运行一次。

[展开全文]

集合添加元素

a.add()

set()变成集合

remove()删除

[展开全文]

字典是散列表  稀疏数组总有空白元素

数组每个单元就是一个bucket:2个部分 键对象引用和值对象引用

[展开全文]

字典元素的增加

键已经存在,覆盖旧的,不存在就增新的

直接添加a['address']='haidian'

2、updata()直接将新字典中的所有键值对全部添加到旧字典对象上  a.update(b)

3、元素删除 del(a[name])

pop()删除指定键值对 b=pop()

[展开全文]