Python笔记

观看b站"麦叔编程"笔记 

链接:Python小技巧#4:__init__.py有什么用处?_哔哩哔哩_bilibili

tips:

 python中列表用[],元组用(),字典用{}字典中的key是字符串

1:__name__ = '__main__'是做什么用的?

当该.py文件被调用的时候不执行,当前文件运行时就执行(调试用的)

2:如何用一条语句合并两个字典Dictionary

x = {'小明':88,'如花':86}
y = {'大美':99,'如花':87}

#适用于python3.5及以上
z = {**x, **y, '张三':100}
print(z)

# {'小明': 88, '如花': 87, '大美': 99, '张三': 100}

#Python 3.4及以下使用
z = x.copy()
z.updata(y)
print(z)

3个知识点:(1)合并语法;(2)键相同时,后一个覆盖前一个;(3)合并时还可以另外加入新的键值对

3.如何在python中执行外部命令?

import subprocess #从3.5开始
p = subprocess.run(['ls','-l'],capture_out=True)
print("=========")
print(p.stdout.decode('UTF-8'))

4. __init__.py有什么用处?

引用其他文件夹.py文件原理:每一个.py文件都是一个模块

让一个文件变成python的包,然后才可以通过文件夹名引用里面的module。

5. 判断一个List是否为空的正确方法?

a = [3]
if a:
    print("List is not empty")   # here
else:
    print("List is empty")

6.For循环中如何访问元素下标?

scores = [100, 99, 95, 90, 89]  #数组
for index, s in enumerate(scores):   #使用enumerate将数组单个值变成下标和值的一个对
    # print(s)
    print('第{}:名{}'.format(index+1, s))
 
   
#或者第二种
#for index, s in enumerate(scores,start=1): #start=1代表下标从1开始

7.如何给字典按照Value排序?

>>> scores = {2:98, 1:87, 3:65, 4:95}
>>> sorted(scores.keys())    #按key由小到大排序
[1, 2, 3, 4]
>>> sorted(scores.keys(),reverse=True)   #按key由大到小排序
[4, 3, 2, 1]
>>> sorted(scores.values(), reverse=True)  #按values由大到小排序
[98, 95, 87, 65]
>>> scores.items()
dict_items([(2, 98), (1, 87), (3, 65), (4, 95)])  #按item(但由item中的key决定)由大到小排序
>>> sorted(scores.items())
[(1, 87), (2, 98), (3, 65), (4, 95)]
>>> sorted(scores.items(),key=lambda item:item[1])  按item(但由item中的values,即第1个决定)由大到小排序
[(3, 65), (1, 87), (4, 95), (2, 98)]
>>> sorted(scores.items(),key=lambda item:item[1], reverse =True)
[(2, 98), (4, 95), (1, 87), (3, 65)]
>>> {k:v for k,v in sorted(scores.items(),key=lambda item:item[1], reverse=True)}
{2: 98, 4: 95, 1: 87, 3: 65}

8. python中有contains方法吗?

>>> a = 'this is maishu coding'
>>> b = 'maishu'
>>> a.contains(b)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'contains'
>>> str.__contains__(a,b)    #规定__开头为私有方法,外部是不能用的
True
>>> b in a    #正确用法:使用in和not in
True
>>> b not in a
False
>>> aa = [99, 97, 95]   #在list中同样使用
>>> 95 not in aa
False
>>> 96 in aa
False

9.实例方法,类方法,静态方法的区别?

class Dog:
	dogbook = {'黄色':30, '黑色':20, '白色':0}

	def __init__(self, name, color, weight):
		self.name = name
		self.color = color
		self.weight = weight
		#此处省略若干行,应该更新dogbook的数量

    #实例方法: 定义时,必须把self作为第一个参数,可以访问实例变量,只能通过实例名访问
	def bark(self):
		print(f'{self.name} 叫了起来')

    #类方法:定义时,必须把类作为第一个参数,可以访问类变量,可以通过实例名或类名访问
	@classmethod
	def dog_num(cls):
		num = 0
		for v in cls.dogbook.values():
			num = num + v
		return num

    #静态方法:不强制传入self或者cls, 他对类和实例都一无所知。不能访问类变量,也不能访问实例变量;可以通过实例名或类名访问
	@staticmethod
	def total_weights(dogs):
		total = 0
		for o in dogs:
			total = total + o.weight
		return total

print(f'共有 {Dog.dog_num()} 条狗')
d1 = Dog('大黄', '黄色', 10)
d1.bark()
print(f'共有 {d1.dog_num()} 条狗')

d2 = Dog('旺财', '黑色', 8)
d2.bark()

print(f'狗共重 {Dog.total_weights([d1, d2])} 公斤')

10.什么是lambda?

1)一句话的函数都可以用lambda表达式代替

3)可以匿名,也可以有名

4)语法糖衣:只是为了简单

5)格式:lambda x:x+1

1)格式:函数名 = lambda 输入:输出  (函数名 = lambda 参数:返回值)

f = lambda x,y: x+y

等同于
def f(x,y):
    return x+y

2)排序经常用
scores=[99,87,98,85,50,21]

def filter(scores,func):
    new_scores=[]
    for s in scores:
        if(func(s)):
            new_scores.append(s)
    return new_scores
    pass
#函数生成器
def beishu(n):
    return lambda x:x%n==0

print(filter(scores,lambda x:x%2==0))
print(filter(scores,lambda x:x%3==0))
print(filter(scores,lambda x:x%5==0))

bei3=beishu(3)##生成了一个函数
bei5=beishu(5)
bei2=beishu(2)
print(filter(scores,bei2))
print(filter(scores,bei3))
print(filter(scores,bei5))

#3 Sorted
ranking={'A':95,'B':99,'D':90,'C':87}
print(sorted(ranking.items(),key=lambda itm:itm[1],reverse=True))

11. append和extend有什么区别?

 a = [1,2,3]
>>> b = [4,5,6]
>>> a.append(b)    #直接把b放入a中,b是什么就怎么放
>>> print(a)
[1, 2, 3, [4, 5, 6]]  
>>> a = [1,2,3]
>>> a.extend(b) #是把b解开以后在放到a中   tips,因为list不会对数值进行计算,也可以直接a+b
>>> print(a) 
[1, 2, 3, 4, 5, 6]    
>>> c = (7,8)    #对于元组同样解开后放入a中
>>> a.extend(c)
>>> print(a)
[1, 2, 3, 4, 5, 6, 7, 8]   

12.把list和字符串大卸8块的方法(切片)

#完整格式 a[start:end:step]
# m  a  i  s  h  u
# 0  1  2  3  4  5  6
#-6 -1 -5 -4 -2 -1
#以下同样适用于list,字符串,元组
#1.取单个元素 a[index]
#2.取子串,a[start:end] 注意不包括end
#3.start和end取负数  a[:-1]->'maish'; a[-1:]->'u'; a[-3:-1]->'sh'
#4.sart > end 怎么办    ->输出为空字符串''
#5.空的start或者end     
#6. 可以用None代替空的start   a[:]->'maishu'; a[2:None]->'ishu'
#7. step
#8. step为负数: a[::-1]   a[::-1]->'uhsiam'  反向减一个

13.Getter, Setter, Property是什么鬼?

Python Tip #13:Getter,Setter,Property是什么鬼?_哔哩哔哩_bilibili

推荐使用person3注解方法

class Person:
    def __init__(self, age):
        self.age = age
zs = Person(33)
print(zs.age)
zs.age = 888
print(zs.age)
##age是一个public属性
##封装,多态和继承(面向对象编程)

##约定变量名前加下划线,表私有,不希望外面被用(虽然可以用)
class Person2:
    def __init__(self,age):
        self._age = age
zs = Person2(33)
print(zs._age)
zs._age = 888
print(zs._age)

#模拟jave中实现
class Person2:
    def __init__(self,age):
        self._age = age
    def set_age(self, age):
        if(age > 100):
            self._age = 100
        else:
            self._age = age
    def get_age(self):
        if(self._age > 18):
            return 18
        else: return self._age
zs = Person2(13)
print(zs.get_age())
zs.set_age(888)
print(zs.get_age())

#正解 代码不直接访问gae函数,而是先访问property
#@property 相当于get方法,类实例时引用;
class Person3:
    def __init__(self,age):
        self._age = age
    @property
    def age(self):    #由这个函数名age找到@age.setter方法
        if(self._age > 18):
            return 18
        else: return self._age

    @age.setter
    def age(self, age):
        if(age > 100):
            self._age = 100
        else:
            self._age = age
zs = Person3(13)
print(zs.age)
zs.age = 888
print(zs.age)

#传统方法
class Person4:
    def __init__(self,age):
        self._age = age
    def set_age(self, age):
        if(age > 100):
            self._age = 100
        else:
            self._age = age
    def get_age(self):
        if(self._age > 18):
            return 18
        else: return self._age
        
    age = property(get_age, set_age)

14. Python中参数为None什么意思?

 python函数参数为None的时候,比如 def req(self, b=None),是因为这个函数是一个封装函数,在没有调用他的时候他的参数需要加上None。如果不加None值,不调用函数他会报错。 一般会用在封装类或者框架里。比如说框架一般会有一个总的调用函数,总的调用函数启动,这次没有获取到值,执行到req函数时无法给req函数参数,那如果没有参数req函数就会报错。一般会报:‘req() missing 1 required positional argument: 'b'’但是如果参数为None就不会报错。如果程序执行到req参数传递成功的话,参数就不会是None了。 所以None是一个防止报错的机制。

15. Python赋值语句 if x is not None else 0

a = 2
a = 1 if a is not None else 0  #如果a不是None则赋值a=1,否则a=0
print(a)
 #输出1   

tips:'',{},[]不是None
# a = []    # 0
# a = {}    # 0
# a = ''    # 0
a = None  # 5
b = 5 if a is None else 0
print(b)

16.其他笔记

pd读取csv文件:

(1)index_col在默认为None的时候,pandas会自动将第一列作为索引,并额外添加一列。所以大多我们会使用index_col=0,直接将第一列作为索引,不额外添加列

(2)使用带标题的数据框时会出现差异,所以假设您的数据框 df 有标题!

  1. header=None pandas 自动将第一行 df (这是实际的列名)分配给第一行,因此你的列不再有名称

  2. header=0 ,熊猫首先删除列名(标题),然后为它们分配新的列名(仅当您在加载文件时传递 names = […….] )。 read_csv( filepath, header = 0 , names = ['....' , '....' ...])

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值