python学习笔记1

目录

1.is和==的区别

2.for(i = 1; i <10; i ++)

3.判断质数,当前数能否被已发现的质数整除

4.函数参数

5.字符串

6.元组tuple

7.列表list

8.zip函数

9.字典dict

10.sorted和lambda

11.random

12.文件


1.is和==的区别

事实上Python为了优化速度,使用了小整数对象池,避免为整数频繁申请和销毁内存空间。而Python对小整数的定义是[-5,257),只有数字在-5到256之间它们的ID才会相等,超过了这个范围就不行了,同样的道理,字符串对象也有一个类似的缓冲池,超过区间范围内自然不会相等了。总的来说,只有数值型和字符串型,并且在通用对象池中的情况下,a是b才为真,否则当a和b是int,str,tuple,list,dict或set型时,a是b均为False.Python 中对象包含的三个基本要素,分别是:id(身份标识),type(数据类型)和value(值)。==是python标准操作符中的比较操作符,是用来比较判断两个对象的值(值)是否相等

在python里,赋值操作都是起一个别名,对象还是原始对象,这叫“ 引用传递 ”

https://blog.csdn.net/dqchouyang/article/details/75098637

https://www.cnblogs.com/CheeseZH/p/5260560.html

a=1
b=1

id(a)
Out[96]: 140721605635840

id(b)
Out[97]: 140721605635840

b=2

id(b)
Out[99]: 140721605635872

b=1

id(b)
Out[102]: 140721605635840

id(2)
Out[103]: 140721605635872

id(1)
Out[104]: 140721605635840

2.for(i = 1; i <10; i ++)

for i in range(1,10,1):
    print(i)

在切片中[开始:结束但是不包括:步长]

3.判断质数,当前数能否被已发现的质数整除

a=[2]
num=3
i=0
n=10
while i<n:
    tag=1
    for j in a:
        if num%j==0:
            tag=0
            break
    if tag==1:
        a.append(num)
        i=i+1
    num=num+1

4.函数参数

可返回x,y这样会返回多个值,x,y = 1,2也可;

f(里面可以写参数名= .... /不写参数名按照参数顺序填值也可/若定义函数时有参数名=值,调用时可作为默认值)

def f1(*a,**b):
    print(a,b)
f1(1,2,a=1,b=2)

(1, 2) {'a': 1, 'b': 2}
*a,任意数量的位置参数都会被合并成一个元组,并绑定到a上
**b任意数量的位置参数都会被合并成一个字典,并绑定到b上

def f2(a,b,c,d,e):
    print(a,b,c,d,e)
f2(*[1,2,3],**{'d':4,'e':5})

1 2 3 4 5
这里要注意d/e和'd'/'e'是对应的

mm={'Jan':1,"Feb":2,'Mar':3}
s='我的生日在{Jan}月'.format(**mm)

'我的生日在1月'

5.字符串

s[start:end:步长]步长可为负数

+操作: 'a'+'b' 返回新的对象'ab'

* : c*3   Out[8]: 'ababab'

字符串创建后不可变

s.strip()一出字符串两侧的空白符(\ n回车空格tab等)s不变

s.upper()s.lower()  s不变

s.captalize()只对串的第一个字符大写,第一个字符是空白符就相当于没大写  s不变

s.title()每个单词首字母大写,不管空白符  s不变

s.isalnum()只含数字或字母或两者空白符不能有则True

s.isdigit()s.startswith()s.endswith()

s.index()s.replace()  s不变

s='1,2,3,4,5,6'

s.split()
Out[55]: ['1,2,3,4,5,6']

s.split(',')
Out[56]: ['1', '2', '3', '4', '5', '6']

s.split(',',4)
Out[57]: ['1', '2', '3', '4', '5,6']

s.rsplit(',',4)
Out[58]: ['1,2', '3', '4', '5', '6']

s.split()第一个参数是分隔符,第二个参数分割多少个s.rsplit从右边开始分割;返回列表,s不变
a='aaa'

b='bbb'

'{}fdsjk{}'.format(a,b)
Out[62]: 'aaafdsjkbbb'

'%sfdsjk%s' % (a,b)
Out[63]: 'aaafdsjkbbb'

'{1}fdsjk{0}'.format(a,b)
Out[64]: 'bbbfdsjkaaa'

'{1}fdsjk{0}'.format(1=2,0='AAA')
  File "<ipython-input-65-70a2752507cf>", line 1
    '{1}fdsjk{0}'.format(1=2,0='AAA')
                        ^
SyntaxError: keyword can't be an expression


'{1}fdsjk{0}'.format(1='2',0='AAA')
  File "<ipython-input-66-da58ecd2ed9c>", line 1
    '{1}fdsjk{0}'.format(1='2',0='AAA')
                        ^
SyntaxError: keyword can't be an expression

'{B}fdsjk{A}'.format(B='2',A='AAA')
Out[67]: '2fdsjkAAA'

'{'1'}fdsjk{A}'.format('1'='2',A='AAA')
  File "<ipython-input-68-81c22a297371>", line 1
    '{'1'}fdsjk{A}'.format('1'='2',A='AAA')
       ^
SyntaxError: invalid syntax

'{'B'}fdsjk{A}'.format('B'='2',A='AAA')
  File "<ipython-input-69-7d217bfadb83>", line 1
    '{'B'}fdsjk{A}'.format('B'='2',A='AAA')
                                           ^
SyntaxError: cannot mix bytes and nonbytes literals

'{B}fdsjk{A}'.format(B='2',A='AAA')
Out[70]: '2fdsjkAAA'

6.元组tuple

作为容器可放各种类型的数据,一旦创建不可改,元组可包含元组,两个元组可用+连接,用下标和切片引用,序列类型支持for循环

t1=('a','cc')

t2=(1,t1,'ddd')

t2
Out[77]: (1, ('a', 'cc'), 'ddd')

a,b,c=t2

a
Out[79]: 1

b
Out[80]: ('a', 'cc')

c
Out[81]: 'ddd'

for i in t1:
    print(i)
    
a
cc


#元素不可变
t=(1,[2,3])
t[1]
Out[150]: [2, 3]
t[1]=[22.2,33]
Traceback (most recent call last):

  File "<ipython-input-151-dba131121fb1>", line 1, in <module>
    t[1]=[22.2,33]

TypeError: 'tuple' object does not support item assignment




7.列表list

a[], 序列类型对象,可用于for循环,可包含各种元素,创建后可变,可+,*

L1=[1,2,3]

L1[0]="aaaa"

L1.append(.....) L1改变

L1.insert(位置,元素)L1改变

L1.pop(位置)L1改变,同时返回pop值

[x*2 for x in range(1,10,2)]
Out[106]: [2, 6, 10, 14, 18]

8.zip函数

>>>a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b)     # 打包为元组的列表
[(1, 4), (2, 5), (3, 6)]需要用list(zipped)
对这个列表可用dict( )得到一个字典
>>> zip(a,c)              # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> zip(*zipped)          # 与 zip 相反,*zipped 可理解为解压,返回二维矩阵式
[(1, 2, 3), (4, 5, 6)]
对这个列表可不!用dict( )得不!到一个字典

9.字典dict

可变不可+

#创建
d={"a":1,"b":2}
d["a"] 通过[ key ]访问
Out[139]: 1

#i对字典里的key迭代
for i in d:
    print(i,d[i])
    
a 1
b 2

#创建
d={}
for i in ["a","b"]:
    d[i]=1
#创建
l1=[(1,2,3),(4,5,6)]
dict(l1)
d={"a":1,"b",2}

 for i , j in d.items():
    print(i,j)
    
a 1
b 2

d.keys()
Out[144]: dict_keys(['a', 'b'])

d.values()
Out[145]: dict_values([1, 2])

10.sorted和lambda

sort 与 sorted 区别:

sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

sorted(iterable[, key[, reverse]])
  • iterable -- 可迭代对象。
  • key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。key是比较的依据

reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)

>>>a = [5,7,6,3,4,1,2]
>>> b = sorted(a)       # 保留原列表
>>> a 
[5, 7, 6, 3, 4, 1, 2]
>>> b
[1, 2, 3, 4, 5, 6, 7]
 
>>> L=[('b',1),('a',2),('c',3),('d',4)]
>>> sorted(L, key=lambda x:x[0])               # 利用key
[('a', 2), ('b', 1), ('c', 3), ('d', 4)]
 
 
>>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>> sorted(students, key=lambda s: s[2])            # 按年龄排序
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
 
>>> sorted(students, key=lambda s: s[2], reverse=True)       # 按降序
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]


# lambda   需求:将列表中的元素按照绝对值大小进行升序排列
list1 = [3,5,-4,-1,0,-2,-6]
sorted(list1, key=lambda x: abs(x))
当然,也可以如下:

list1 = [3,5,-4,-1,0,-2,-6]
def get_abs(x):
    return abs(x)
sorted(list1,key=get_abs)

11.random

几乎所有的计算机程序生成的“随机数”都不是真正的随机数,而是以一个种子(真随机数)为初始值,通过算法迭代生成后续随机数

random.random()  [0,1)

random.randint(a,b)  [a,b)

random.randrange(a,b,c)   a开始,b结束但是不包括,c等差;得到一个等差,从中取一个数

random.shuffle(列表) 返回原始列表顺序

random.choice(列表)  列表选一

random.sample(列表,n)列表选n

random.seed(1)
a=random.randint(1,100)
random.seed(1)
b=random.randint(1,100)
结果一样a=b
c=random.randint(1,100)
c可能就不等于a和b了

每次使用random里的方法前设置相同seed结果才会重现,

12.文件

#打开文件
fr=open(r'C:\Users\Lenovo\Desktop\test.log','r')
#第二个参数r表示只读,a表示读写分别用fr和fw代表返回,容易区分
lines=f.readlines()
第一个参数里面的r是作用于'\',也可写成'C:\\Users\\Lenovo\\Desktop\\test.log'或者'C:/Users/Lenovo/Desktop/test.log'
for i in lines:
    print(i.strip())
    
111111
222222
333333
444444
555555
666666
文件操作结束后要f.close()否则会导致部分数据写入不成功

#glob,获取某目录里的所有文件名,若其中还有其他目录可用/*/*表示多进一层目录
from glob import glob 
fp=glob(r'C:\Users\Lenovo\Desktop\*')
fp
Out[8]: 
['C:\\Users\\Lenovo\\Desktop\\CodeBlocks.lnk',
 'C:\\Users\\Lenovo\\Desktop\\test.log',
 'C:\\Users\\Lenovo\\Desktop\\小孩桌面便签.lnk',
 'C:\\Users\\Lenovo\\Desktop\\桌面文件',
 'C:\\Users\\Lenovo\\Desktop\\项目学习']
#不是所有的.lnk都能读取到 。。。。为什么

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值