Python期末复习总结

Python期末考试知识点(史上最全) 3.以下关键字不能声明为变量名[‘and’,‘as’,‘assert’,‘break’,‘class’,‘continue’,‘def’,‘elif’,‘else’,‘except’,‘exec’,‘finally’,‘for’,‘from’,‘global’,‘if’,‘import’,‘in’,‘is’,‘lambda’,‘not’,‘or’,‘pass’,‘print’,‘raise’,‘return’,‘try’,‘while’,‘with’,‘yield’]跨平台性好、开发效率不高。 阅读详情

为了复习方便 下面内容摘自PYTHON入门期末复习汇总_锴笑口常开的博客-优快云博客_python复习

在这里插入图片描述

PYTHON期末复习之语法

将用一张思维导图的形式来展示python的基础语法.

在这里插入图片描述

PYTHON期末复习之运算符

Python语言支持以下类型的运算符:

算术运算符
比较(关系)运算符
赋值运算符
逻辑运算符
位运算符
成员运算符
身份运算符
运算符优先级

在这里插入图片描述

PYTHON期末复习之组合数据类型

1.列表类型(灵活可变)
列表是用中括号([])表示
直接使用list()可以生成一个空列表
list()还可以将元组和字符串转化为列表。在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.集合类型(元素类型不可重复,且是固定一种数据类型,例如整型,字符型)
集合是用大括号({})表示
set()函数可以生成集合.

在这里插入图片描述

在这里插入图片描述

3.字典类型(键值对,键(一个属性),值(属性的内容))
字典是通过大括号来表示({})以冒号连接,不同键值对通过逗号连接
大括号也可以创建一个空的字典,可以通过中括号向其增加内容.

在这里插入图片描述

4.元组类型(不可变序列,不能删除,不能修改)
元组用逗号和圆括号表示
使用小括号 () 或 tuple() 或直接创建,元素间用逗号分隔.
和列表类型差不多.

PYTHON期末复习之字符串类型

在这里插入图片描述

 错题总结:

1.zip(a,b)表示[(10,93),(11,30),(12,71),(13,68)]

a = (10, 11, 12, 13)
b = (93, 30, 71, 68)
d = dict( zip(a,b) )    #打包为元组的列表,并且元素个数与最短的列表一致.zip(a,b)表示[(10,93),(11,30),(12,71),(13,68)],dict()将其转换为字典{10:93,11:30,12:71,13:68}
print( tuple(d.keys()) )#keys返回一个列表,并且提取出d中键的值放入列表中,就是(10,11,12,13),tuple将列表转换为元组.

2.排序sorted

reverse默认为false 从小到大

True为从大到小

d= {'a':24,'g':52,'i':12,'k':33}
# 以列表形式输出字典d的key
# d.items()为字典d的键值对
b1=[key for key,value in d.items()]
print(b1)
# 以列表的形式输出字典d的value
b2={value for key,value in d.items()}
print(b2)
# 颠倒字典d的key:value位置
b3={value : key for key,value in d.items()}
print(b3)
 
# 将字典d按value的值进行排序
b4=sorted(d.items(), key=lambda x: x[1])
print(b4)

 sorted(d.items(), key=lambda x: x[1]) 中 d.items() 为待排序的对象;key=lambda x: x[1] 为对前面的对象中的第二维数据(即value)的值进行排序。 key=lambda  变量:变量[维数] 。维数可以按照自己的需要进行设置。
维数以字符串来表示

Lambda表达在Python中是作为一个匿名函数的构造器而存在。

最简单的一个Lambda表达式例子和对应的非匿名函数:
 

f = lambda x: x + 1
print ( f(1) )
 
 
def h (x):
	return x + 1
print ( h(1) )

带有一个参数的Lambda表达式和对应的非匿名函数:

def f(n):
	return lambda x: x / n
print ( f(1)(2) ) 	# n=1; x=2
 



 
def g(n):
	return lambda x: x / n
k = g(1)			# n=1
print ( (k(2)) )	# x=2
 




 
def h(x,n):
	return x / n
print ( h(2,1) )	#x=2; n=1

Lambda匿名函数经常被用到filter(), map(), reduce(), sorted()函数中,这些函数的共同点是均需要函数型的参数,Lambda表达式正好适用。以sorted函数为例,其key参数指定了一个负责从带排序的list中抽取comparison key的函数。
 

club_ranking = [
    ('Arsenal', 3),
    ('Chelsea', 1),
	('Manchester City', 2),
    ('Manchester United', 4),
]
club_sorted = sorted(club_ranking, key = lambda x: x[1])   # sort by ranking
print (club_sorted)
 
#这里的lambda x: x[1]  1指的是元组中的第二个值进行排序
 
'''
在Python3.4中需要使用functools将cmp函数转化为key函数
'''
import functools
club_ranking = [
    ('Arsenal', 3),
    ('Chelsea', 1),
	('Manchester City', 2),
    ('Manchester United', 4),
]
def get_ranking( x, y ): #define cmp function
	return x[1] - y[1]
club_sorted = sorted(club_ranking, key = functools.cmp_to_key(get_ranking))   # sort by ranking
print (club_sorted)

3.reversed()函数

print(sorted([1,2,3],reverse=True)==reversed([1,2,3]))
a=[1,2,3]
print(reversed([1,2,3]))
print(reversed(a))

print(sorted(a))

def print_iter(it):
    for i in it:
        print(i,end=' ')
    print('\n')

print_iter(a)



<list_reverseiterator object at 0x7fe578127190>
<list_reverseiterator object at 0x7fe578127190>
[1, 2, 3]
1 2 3 

 reversed()函数从指定的sequence参数返回反向迭代器。

带序列的reversed() (reversed() with sequence)

Let’s look at reversed() function examples with standard sequence objects such as string, bytes, tuple, list etc.

让我们看一下带有标准序列对象(例如字符串, 字节 ,元组,列表等)的reversed()函数示例。

def print_iterator(it):
    for x in it:
        print(x, end=' ')
    print('\n')
 
 
# reversed string
r = reversed('abc')
print(type(r))
print(r)
print_iterator(r)
 
# reversed list
r = reversed([1, 2, 3])
print_iterator(r)
 
# reversed tuple
r = reversed((1, 2, 3))
print_iterator(r)
 
# reversed bytes
r = reversed(bytes('abc', 'utf-8'))
print_iterator(r)
 
# reversed bytearray
r = reversed(bytearray('abc', 'utf-8'))
print_iterator(r)

<class 'reversed'>
<reversed object at 0x109d1f208>
c b a 
 
3 2 1 
 
3 2 1 
 
99 98 97 
 
99 98 97

4.enumerate()的用法

enumerate()说明

enumerate()是python的内置函数
enumerate在字典上是枚举、列举的意思
对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值
enumerate多用于在for循环中得到计数
例如对于一个seq,得到:

(0, seq[0]), (1, seq[1]), (2, seq[2])


1
enumerate()返回的是一个enumerate对象,例如: 

enumerate()使用

如果对一个列表,既要遍历索引又要遍历元素时,首先可以这样写:

list1 = ["这", "是", "一个", "测试"]
for index, item in enumerate(list1):
    print index, item
>>>
0 这
1 是
2 一个
3 测试

enumerate还可以接收第二个参数,用于指定索引起始值,如

list1 = ["这", "是", "一个", "测试"]
for index, item in enumerate(list1, 1):
    print index, item
>>>
1 这
2 是
3 一个
4 测试
a=[4,3,2,1]

print(list(enumerate(a)))

for i,j in enumerate(a):
    print(i,j)

//[(0, 4), (1, 3), (2, 2), (3, 1)]
0 4
1 3
2 2
3 1

5.map函数

map(func, seq1[, seq2,…]) 
第一个参数接受一个函数名,后面的参数接受一个或多个可迭代的序列,返回的是一个集合。 
Python函数编程中的map()函数是将func作用于seq中的每一个元素,并将所有的调用的结果作为一个list返回。如果func为None,作用同zip()。

1、当seq只有一个时,将函数func作用于这个seq的每个元素上,并得到一个新的seq。 
让我们来看一下只有一个seq的时候,map()函数是如何工作的。 
work
从上图可以看出,函数func函数会作用于seq中的每个元素,得到func(seq[n])组成的列表。下面举得例子来帮助我们更好的理解这个工作过程。

#使用lambda
>>> print map(lambda x: x % 2, range(7))
[0, 1, 0, 1, 0, 1, 0]

#使用列表解析
>>> print [x % 2 for x in range(7)]
[0, 1, 0, 1, 0, 1, 0]

一个seq时,可以使用filter()函数代替,那什么情况不能代替呢?

2、当seq多于一个时,map可以并行(注意是并行)地对每个seq执行如下图所示的过程:2
从图可以看出,每个seq的同一位置的元素同时传入一个多元的func函数之后,得到一个返回值,并将这个返回值存放在一个列表中。下面我们看一个有多个seq的例子:

>>> print map(lambda x , y : x ** y, [2,4,6],[3,2,1])
[8, 16, 6]

 如果上面我们不使用map函数,就只能使用for循环,依次对每个位置的元素调用该函数去执行。还可以使返回值是一个元组。如:

>>> print map(lambda x , y : (x ** y, x + y), [2,4,6],[3,2,1])
[(8, 5), (16, 6), (6, 7)]

当func函数时None时,这就同zip()函数了,并且zip()开始取代这个了,目的是将多个列表相同位置的元素归并到一个元组。如:

需要注意的是: 
map无法处理seq长度不一致、对应位置操作数类型不一致的情况,这两种情况都会报类型错误。如下图: 
8

3、使用map()函数可以实现将其他类型的数转换成list,但是这种转换也是有类型限制的,具体什么类型限制,在以后的学习中慢慢摸索吧。这里给出几个能转换的例子:

***将元组转换成list***
>>> map(int, (1,2,3))
[1, 2, 3]
***将字符串转换成list***
>>> map(int, '1234')
[1, 2, 3, 4]
***提取字典的key,并将结果存放在一个list中***
>>> map(int, {1:2,2:3,3:4})
[1, 2, 3]
***字符串转换成元组,并将结果以列表的形式返回***
>>> map(tuple, 'agdf')
[('a',), ('g',), ('d',), ('f',)]
#将小写转成大写
def u_to_l (s):
  return s.upper()
print map(u_to_l,'asdfd')

a=[1,2,3]
b=['a','b','c']

print(list(zip(a,b)))


print(map(str,a))

print(list(map(int,a)))
print(list(map(str,a)))


print(list(map(lambda x:x%2,range(7))))
print(list(map(lambda x:x+1,range(7))))
print(list(x%2 for x in range(7)))


print(list(map(lambda x,y:x**y,[2,2],[2,3])))
# [(1, 'a'), (2, 'b'), (3, 'c')]
# <map object at 0x7ffcd024c4f0>
# [1, 2, 3]
# ['1', '2', '3']
# [0, 1, 0, 1, 0, 1, 0]
# [1, 2, 3, 4, 5, 6, 7]
# [0, 1, 0, 1, 0, 1, 0]
# [4, 8]

6.filter

filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个序列,函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新的序列Iterator。

例如,要从一个list [1, 4, 6, 7, 9, 12, 17]中删除偶数,保留奇数,首先,要编写一个判断奇数的函数:
 

a=[1,2,3,4,5,6,7]

def check(x):
    if(x%2==0):
        return 1
    else :
        return 0

print(filter(check,a))
print(list(filter(check,a)))

# <filter object at 0x7f895824c4f0>
# [2, 4, 6]

import math
def is_sqr(x):
    r = int(math.sqrt(x))
    return r * r == x
t = filter(is_sqr, range(1, 101))
print(list(t))
#输出结果
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

7..join()函数的运用

这个函数展开来写应该是str.join(item),join函数是一个字符串操作函数

str表示字符串(字符),item表示一个成员,注意括号里必须只能有一个成员,比如','.join('a','b')这种写法是行不通的

举个例子:

','.join('abc')

join()函数

语法: ‘sep’.join(seq)

参数说明: 
sep:分隔符,可以为空。 
seq:要连接的元素序列、字符串、元组、字典。 
上面的语法即:以sep作为分隔符,将seq所有的元素合并成一个新的字符串。

返回值:返回一个以分隔符sep连接各个元素后生成的字符串。

#对序列进行操作(分别使用' '与':'作为分隔符)

>>> seq1 = ['hello','good','boy','doiido']
>>> print ' '.join(seq1)
hello good boy doiido
>>> print ':'.join(seq1)
hello:good:boy:doiido


#对字符串进行操作

>>> seq2 = "hello good boy doiido"
>>> print ':'.join(seq2)
h:e:l:l:o: :g:o:o:d: :b:o:y: :d:o:i:i:d:o


#对元组进行操作

>>> seq3 = ('hello','good','boy','doiido')
>>> print ':'.join(seq3)
hello:good:boy:doiido


#对字典进行操作

>>> seq4 = {'hello':1,'good':2,'boy':3,'doiido':4}
>>> print ':'.join(seq4)
boy:good:doiido:hello


#合并目录

>>> import os
>>> os.path.join('/hello/','good/boy/','doiido')
'/hello/good/boy/doiido'

注意:里面的元素必须是str类型

8.eval函数

eval(str)函数很强大,官方解释为:将字符串str当成有效的表达式来求值并返回计算结果。所以,结合math当成一个计算器很好用。

eval()函数常见作用有: 
1、计算字符串中有效的表达式,并返回结果

 
>>> eval('pow(2,2)')
4
>>> eval('2 + 2')
4
>>> eval("n + 4")
85

2、将字符串转成相应的对象(如list、tuple、dict和string之间的转换)

>>> a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"
>>> b = eval(a)
>>> b
[[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]
>>> a = "{1:'xx',2:'yy'}"
>>> c = eval(a)
>>> c
{1: 'xx', 2: 'yy'}
>>> a = "(1,2,3,4)"
>>> d = eval(a)
>>> d
(1, 2, 3, 4)

10.set

首先我们需要知道什么可以作为集合的元素。集合对象是一组无序排列***可哈希***的值,集合成员可以做字典中的键。那么可哈希与不可哈希是什么意思呢?

简要的说可哈希的数据类型,即不可变的数据结构(字符串str、元组tuple、对象集objects);同理,不可哈希的数据类型,即可变的数据结构 (集合set,列表list,字典dict)

Python面向对象静态方法,类方法,属性方法

属性:

  公有属性  (属于类,每个类一份)

  普通属性  (属于对象,每个对象一份)

  私有属性    (属于对象,跟普通属性相似,只是不能通过对象直接访问) 

方法:(按作用)

  构造方法

  析构函数

方法:(按类型)

  普通方法

  私有方法(方法前面加两个下划线)

  静态方法

  类方法

  属性方法

静态方法

@staticmethod
静态方法,通过类直接调用,不需要创建对象,不会隐式传递self

class Dog(object):
    @staticmethod
    def run():
        # 不需要访问类属性和实例属性的方法,就可以定义一个静态方法
        print("跳着跑")
 
    def __init__(self, name):
        self.name = name
 
    def bark(self):
        pass
 
 
# 通过 类名. 调用静态方法,不需要创建对象
Dog.run()

类方法

@classmethod
类方法,方法中的self是类本身,调用方法时传的值也必须是类的公有属性,
就是说类方法只能操作类本身的公有字段

class Plant(object):
    # 使用赋值语句定义类属性,记录所有植物对象的数量
    count = 0
 
    # 定义一个类方法
    @classmethod
    def show_count(cls):
        print("目前已养植物种类数量:", Plant.count)
 
    def __init__(self, name):
        self.name = name
        Plant.count += 1
 
 
duorou = Plant("多肉")
luhui = Plant("芦荟")
 
# 调用类方法
Plant.show_count()  # 目前已养植物种类数量: 2

10 yield 和 return 对比分析

相同点:都是返回函数执行的结果

不同点:return 在返回结果后结束函数的运行,而yield 则是让函数变成一个生成器,生成器每次产生一个值(yield语句),函数被冻结,被唤醒后再产生一个值

例子:求一组数的平方值

return 实现:

def squre(n):
    ls = [i*i for i in range(n)]
    return ls
for i in squre(5):
    print(i, end='  ')
0  1  4  9  16  

yield 实现:

def squre(n):
    for i in range(n):
        yield i*i
for i in squre(5):
    print(i, end='  ')


yield 生成器相比 return一次返回所有结果的优势:

(1)反应更迅速

(2)更节省空间

(3)使用更灵活

11.__iter__ 和 __next__

​​​​​​​

__iter__和__next__

iter()函数主要映射类中__iter__函数

next()函数主要映射类中__next__函数

class MyRange(object):
    def __init__(self, end):
        self.start = 0
        self.end = end
 
    def __iter__(self):
        return self
 
    def __next__(self):
        if self.start < self.end:
            ret = self.start
            self.start += 1
            return ret
        else:
            raise StopIteration
 
 
m = MyRange(5)
modify(m)          # Iterable, Iterator
 
# 利用for语句迭代元素,会捕获StopIteration异常并自动结束for
for i in m:
    print(i)
# 利用next()函数迭代元素
print(next(a))
print(next(a))
print(next(a))
print(next(a))
print(next(a))
print(next(a)) # 其实到这里已经完成了,我们在运行一次查看异常

12.and or

print(2 and 3)
print(2 or 3)
print(2 and 3 or 4)
print(2 and 3 and 4)
print(2 or  3 or 4)
# 3
# 2
# 3
# 4
# 2

13.

1. 有序集合:list,tuple,str和unicode;
2. 无序集合:set
3. 无序集合并且具有 key-value 对:dict                              都是可以通过 for--in--进行遍历的                                                                                                                                 

 14.

1 字符串统一大小写方法

title方法

title方法,将字符串中相分割的单词首字母大写,其余小写。

upper方法

upper方法,将字符串中所有字母大写。

lowe方法

lowe方法,将字符串中所有字母小写。

2 字符串替换方法

replace方法

replace方法,替换字符串中内容,并返回新的一个字符串对象。
再Python中字符串属于不可变对象,不能在原位修改,所以replace方法,相当于先替换原字符串部分内容,然后返回替换后的一个新的字符串对象。

语法:r_str = string.replace(__old=str,__new=str,__count= int) 参数含义:old:被替换的内容,new:替换内容,count:替换次数,默认全部替换。 

你可以试着自己写一个函数来实现字符串替换的功能?

3 字符串切割与组合方法

split与join方法,字符串的分割与组合。

split 方法

split,将字符串按特定字符进行切割返回一个列表对象,如下,按空格切割字符串:

join方法

join方法,用特定字符串来连接列表中的字符串
注意:列表中的对象需全部为字符串类型

split ,join方法的组合使用

利用join,split方法来实现特定格式字符串的传输。如网络通讯时只能传输字符串,不支持列表等形式内容,但又要保持数据的特定结构,就可以用以下方式来对信息进行处理。
如:有一个如下列表信息,需要将其转化为具有特定结构字符串:

先用对内层列表内容进行字符串转化,用‘?’连接
 

4 清除字符串空格方法

当读取文本字符串内容,或者从gui页面获取字符串数据时,字符串首尾可能会出现空格。而这些空格对后期数据处理可能会造成一些麻烦,此时就可以用rstrip,lstrip,strip方法来去除。

rstrip方法

rstrip 去除右侧空格(末尾空格)。

lstrip方法

lstrip 去除左侧空格(前端空格)。

strip方法

strip 去除两侧空格(首位空格)

str_a = 'abC deF'
print(str_a.title())
# ------运行结果------
# Abc Def
# ------运行结果------

print(str_a.upper())
# ------运行结果------
# ABC DEF
# ------运行结果------

print(str_a.lower())
# ------运行结果------
# abc def
# ------运行结果------

str_b = '杰伦最帅,杰伦新歌什么时候出来?'
replace_all = str_b.replace('杰伦','周杰伦')
print(replace_all)
# ------运行结果------
# 周杰伦最帅,周杰伦新歌什么时候出来?
# ------运行结果------

replace_one = str_b.replace('杰伦','周杰伦',1)
print(replace_one)
# ------运行结果------
# 周杰伦最帅,杰伦新歌什么时候出来?
# ------运行结果------

str_c = '我 是 一 个 字 符 串'
list_a = str_c.split(' ')
print(list_a)
# ------运行结果------
# ['我', '是', '一', '个', '字', '符', '串']
# ------运行结果------

str_d = ' '.join(list_a)
print(str_d)
# ------运行结果------
# 我 是 一 个 字 符 串
# ------运行结果------

list_c = [['大明', '22', '编程'], ['大李', '23', '吃饭']]
# 列表转为字符串
message_c = '#'.join(['?'.join(t) for t in list_c])
print(message_c)
# ------运行结果------
# 大明?22?编程#大李?23?吃饭
# ------运行结果------
# 字符串转化为列表
message_list_c = [m.split('?') for m in message_c.split('#')]
print(message_list_c)
# ------运行结果------
# [['大明', '22', '编程'], ['大李', '23', '吃饭']]
# ------运行结果------

str_e = ' abc def '
str_e.rstrip()

str_e.lstrip()

str_e.strip()

16.

python 短路求值或惰性求值

总体解释

首先,‘and’、‘or’和‘not’的优先级是not>and>or。

其次,逻辑操作符and 和or 也称作短路操作符(short-circuitlogic)或者惰性求值(lazy evaluation):它们的参数从左向右解析,一旦结果可以确定就停止。例如,如果A 和C 为真而B 为假, A and B and C 不会解析C 。作用于一个普通的非逻辑值时,短路操作符的返回值通常是最后一个变量。因此,逻辑运算符的理解也与C语言中不同。举个例子:

输出内容:

在以上例子中,按照C语言对的思维,3 and 4即3与4为3,但是由于是短路操作符,结果为4,是因为and运算符必须所有的运算数都是true才会把所有的运算数都解析,并且返回最后一个变量,即为4;改变一下顺序4 and 3 ,结果也不一样,即为3

而或逻辑(or),即只要有一个是true,即停止解析运算数,返回最近为true的变量,即 3 or 4,值为3;改变顺序4 or 3 即为4

个人理解

赋值变量为非布尔型时,进行判断永远返回真,所以and时,由于两个值都是true,则返回末尾的值,or 时,由于第一个已经是true了,所以第二个将不再继续判断。
17/Python导入模块的3种方式

导入模块方式一:临时添加模块完整路径

模块文件的存储位置,可以临时添加到 sys.path 变量中,即向 sys.path 中添加 D:\python_module(hello.py 所在目录),在 say.py 中的开头位置添加如下代码:

import sys

sys.path.append('D:\\python_module')

导入模块方式二:将模块保存到指定位置

如果要安装某些通用性模块,比如复数功能支持的模块、矩阵计算支持的模块、图形界面支持的模块等,这些都属于对 Python 本身进行扩展的模块,这种模块应该直接安装在 Python 内部,以便被所有程序共享,此时就可借助于 Python 默认的模块加载路径。

 

[
'C:\\Users\\shaobing\\Desktop',
'D:\\python3.6\\Lib\\idlelib', 
'D:\\python3.6\\python36.zip',
'D:\\python3.6\\DLLs', 
'D:\\python3.6\\lib',
'D:\\python3.6', 'C:\\Users\\shaobing\\AppData\\Roaming\\Python\\Python36\\site-packages',
'D:\\python3.6\\lib\\site-packages', 
'D:\\python3.6\\lib\\site-packages\\win32', 
'D:\\python3.6\\lib\\site-packages\\win32\\lib', 
'D:\\python3.6\\lib\\site-packages\\Pythonwin'
]

上面的运行结果中,列出的所有路径都是 Python 默认的模块加载路径,但通常来说,我们默认将 Python 的扩展模块添加在 lib\site-packages 路径下,它专门用于存放 Python 的扩展模块和包。

所以,我们可以直接将我们已编写好的 hello.py 文件添加到 lib\site-packages 路径下,就相当于为 Python 扩展了一个 hello 模块,这样任何 Python 程序都可使用该模块。

移动工作完成之后,再次运行 say.py 文件,可以看到成功运行的结果:

Hello,World!

导入模块方式三:设置环境变量

PYTHONPATH 环境变量(简称 path 变量)的值是很多路径组成的集合,Python 解释器会按照 path 包含的路径进行一次搜索,直到找到指定要加载的模块。当然,如果最终依旧没有找到,则 Python 就报 ModuleNotFoundError 异常。

由于不同平台,设置 path 环境变量的设置流程不尽相同,因此接下来就使用最多的 Windows、Linux、Mac OS X 这 3 个平台,给读者介绍如何设置 path 环境变量。
19.列表推导式和生成器表达式

列表推导式

  • 例一:30以内所有能被3整除的数
print([i for i in range(0,31) if i%3 == 0])
  • 例二:30以内所有能被3整除的数的平方
print([i*i for i in range(30) if i % 3 == 0])
  • 例三:找到嵌套列表中名字含有两个‘e’的所有名字

 
 
 
  1. names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],

  2. ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]

  3. print([name for lst in names for name in lst if name.count('e') >= 2])

练习题

例1:  过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母

例2:  求(x,y)其中x是0-5之间的偶数,y是0-5之间的奇数组成的元祖列表

例3:  求M中3,6,9组成的列表M = [[1,2,3],[4,5,6],[7,8,9]]

1.[name.upper() for name in names if len(name)>3] 
2.[(x,y) for x in range(5) if x%2==0 for y in range(5) if y %2==1] 
3. [row[2] for row in M] 

生成器表达式

1.把列表推导式中的[]换成()得到的就是生成器表达式

2.列表解析与生成器表达式都是一种便利的编程方式,只不过生成器表达式更节省内存

3.Python不但使用迭代器协议,让for循环变得更加通用。大部分内置函数也是使用迭代器协议访问对象的。

例如:sum函数是Python的内置函数,该函数使用迭代器协议访问对象,而生成器实现了迭代器协议,所以,我们可以直接这样计算一系列值的和。

sum(x ** 2 for x in range(4))

 

1 可迭代对象

Python中,列表、元组、字典、集合、字符串等类型的数据可以使用for ..in...的语法从其中依次取到数据来使用,这样的过程称为遍历,也叫迭代。

可迭代对象:可以通过for ..in...这类语句迭代读取一条数据给用户使用的对象。

下面是一段列表的迭代示例代码:

>>> list1 = [1, 2, 3]
>>> for n in list1:
...     print(n)
...
1
2
3

>>> dict1 = {'one':1, 'two':2, 'three':3}
>>> for key in dict1.keys():
...     print(key)
...
one
two
three

2 判断对象是否为可迭代的

使用isinstance判断一个对象是否为可迭代对象(Iterable)

示例代码如下:

from collections import Iterable

>>> isinstance([1,2,3], Iterable) # 列表为可迭代对象
True
>>> isinstance({1,2,3}, Iterable) # 集合为可迭代对象
True
>>> isinstance(100, Iterable) 
False

3 可迭代对象的本质

分析迭代的过程,可发现:每迭代一次(即在for…in…中每循环一次),都会返回对象中的下一条数据,一直向后读取,直到迭代完全部数据才结束。

在迭代过程中,应该有一个“记录员”去记录每次访问到第几条数据,以便每次迭代都可以返回下一条数据。Python将这个“记录员”称为迭代器。可迭代对象的本质是:这个对象提供给用户一个迭代器,来帮助用户在遍历对象时使用。

可迭代对象通过__iter__方法通过给我们一个迭代器。当用户在迭代一个可迭代对象时,实际上就是先获取该对象提供的迭代器,然后通过这个迭代器来一次获取对象中的每一个数据。

具备__iter__方法的对象,就是一个可迭代对象。

4 iter()与next()

对于可迭代对象,可以使用iter()函数得到这些可迭代对象的迭代器,然后对迭代器使用next()函数来获取下一条数据。(iter()函数调用了可迭代对象的__iter__方法)

在使用next()迭代完最后一个元素后,再次调用next就会抛出StopIteration异常,以此来告诉我们所有元素均迭代完成。

Python期末总结 Python期末总结 第二章 2.1代码格式 良好的代码格式可提升代码的可读性 注释 单行注释以“#” 开头,用于说明当前行或之后代码的功能。单行注释既可以单独占一行,也可以位于标识的代码之后,与标识的代码共占一行。 # 第一个注释 print (“Hello, Python!”) # 第二个注释 多行注释是由三对双引号或单引号包裹的语句,主要用于说明函数或类的功能。 """.. 阅读详情

相关推荐

python期末总结

python大一上半学期期末总结 不知不觉就度过一个学期,作为一名顺利度过大一上半学期的学生,我受益颇丰。回顾加入泸州职业技术学院来的点点滴滴,历历在目。   学习方面,我克服了从高中到大学转变的种种不适,经过一学期的锻炼,我认识到了大学与高中在学习动机、学习动力以及学习习惯方面的重大区别,并有了一点心得。   通过这一学期,我适应了大学的生活,让自己在新的人生旅程里有了一个好的开始。也让我明白自己将来要走怎样的路,明确了路的方向。进入大学,第一学期就这样悄无声息的过了,在学业上,好像我并没有太大的收获。但

m0_52168110的博客 1443

Python期末复习知识点大合集(期末不挂科版)

Python期末考试知识点总结大合集(期末不挂科版),祝大家期末考试顺利通过!!!总结不易,期待得到你们的点赞收藏转发三连,谢谢!

北天的博客 4万+

【Python】2023年Python期末复习题

Python百分百挂科指南 出题人,出的题,水平不咋样,给出的参考答案一堆错误,给出的正确选项单词都能拼错。 非本次考试人员不必看,没有参考价值 选择题 下列哪个标识符是不合法的()D A. Name B. _or C. From D.88abc 只能是字母、下划线开头,不能以数字开头 区分大小写 可以包含多个数据类型,且不能删除其中元素的数据类型是()B A. 列表...

萌狼蓝天の技术栈 2263

python期末复习知识点总结

期末复习知识点总结 第一章 1.6 Python编程规范与代码优化建议 1.7 模块 模块的导入方式 补:Python编程规范与代码优化建议 注释 以符号#开始,表示本行#之后的内容为注释。 #eg1_2.py coding=gbk n = int(input("请输入一个整数:")) k=1;sum=0 for i in range(1,n+1): sum=sum+k print("sum=",sum) 缩进 类定义、函数定义、选择结构、循环结构、with快,行尾的冒号表示缩进的开

weixin_40184069的博客 1万+

自动驾驶仿真:基于Carsim开发的加速度请求模型

1、自动驾驶行业中,算法端对于纵向控制的功能预留接口基本都是加速度,我们需要给控制器仿真加速度的信号,控制器才会实现对纵向功能的控制。2、Carsim或者其他动力学软件,主要提供者节气门开度和主缸压力进行控制。我们在进行联合仿真时,往往都要通过PID的方式将请求加速度转换成对应的节气门开度与主缸压力传给动力学软件进行闭环控制。

zataji的博客 6915

类银河恶魔城游戏开发学习笔记(0)

解决B站搬运【Unity教程】从0编程制作类银河恶魔城游戏P37中moveState和idleState循环切换的问题

Gellar的博客 1448

Python期末复习代码收录

#乘法口诀表 for i in range(10): for j in range(1,i+1): print('{0}*{1}={2}'.format(i,j,i*j),end=' ') print() #计算1000内的素数 for n in range(1000,1,-1): if n%2 ==0: continue for i in range (3,int(n**0.5)+1,2): if n%i ==0: .

qq_45736483的博客 2759

Java开发者必看:5分钟搞定PaddleOCR表格识别,导出Excel和HTML超详细教程

本文为Java开发者提供了集成PaddleOCR实现智能表格识别的详细教程,包括环境配置、核心代码实现、结果导出到Excel和HTML的步骤,以及性能优化技巧。通过PaddleOCR技术,开发者可以快速将图片表格转换为结构化数据,大幅提升工作效率。

weixin_30872499的博客 99

Python期末复习题

期末复习判断题 ( √ )Python变量名区分大小写,所以student和Student不是同一个变量。 ( × )在Python中可以使用if作为变量名。 ( √ )字符串属于Python有序序列,和列表、元组一样都支持双向索引。 ( × )clear( )方法删除列表的最后一个元素。 clear用于清空所有元素,可以用于列表、字典、集合 ( × )只有if语句与else语句成对出现才能实现双分支结构。 ( × )可以采用append(x)方法在元组末尾增加一个元素x。 元

qq_55786319的博客 5976

手把手教你用AirSim和Unreal4在Ubuntu上创建自定义无人机仿真场景

本指南详细介绍了如何在Ubuntu系统上使用AirSim和Unreal Engine 4搭建高精度无人机仿真环境。从硬件配置、驱动安装到Unreal Engine编译和AirSim集成,手把手教你创建自定义场景,适用于算法验证和开发测试。

y7z8a的博客 257

ChatGPT Plus完整开通指南:从账号注册到稳定使用全流程

自然语言处理(NLP)技术通过深度学习模型实现对人类语言的理解与生成,其核心原理是基于Transformer架构的大规模预训练。GPT-4作为当前最先进的生成式AI模型,在代码编写、文档分析等场景展现出显著的技术价值。在实际应用中,稳定的网络环境和合规的支付方式是确保AI助手持续服务的关键因素。针对ChatGPT Plus的开通,需要系统性地解决账号验证、虚拟信用卡支付等工程实践问题,才能实现工作流的高效整合。

weixin_34239592的博客 428

python期末复习

定义类中成员变量的代码如下:(通过self.变量名定义的属性)【例9.3】定义类Person2。定义成员变量(域)class Person2: #定义类Person2def __init__(self, name,age): #__init__方法self.name = name #初始化self.name,即成员变量name(域)self.age = age #初始化self.age,即成员变量age(域)def say_hi(self): #定义类Person2的函数say_hi()

csdn3043663729的博客 2850

【网络安全 | 渗透工具】Hydra安装使用详细教程

Hydra,也称九头蛇,是一款非常强大的暴力破解工具(密码能否被破解关键在于字典是否足够强大),支持多种服务协议的账号和密码进行爆破,包括Web登录、数据库、SSH、FTP等服务,支持Linux、Windows、Mac平台安装。该工具支持以下协议的爆破:Hydra在kali中自带,这里介绍windows下的安装方法。zip下载地址:https://gitcode.com/maaaaz/thc-hydra-windows/tree/master下载完成后解压: 再将thc-hydra-windows-mast

等风来 9200

Python期末复习

np.random.randint(low, high=None, size=None, dtype='l'):生成一个整数或N维整数数组,取数范围:若high不为None时,取[low,high)之间随机整数,否则取值[0,low)之间随机整数。df = pd.read_table('example.txt',encoding = 'gbk',sep = ',',nrows= 5)#nrow为读取行数。print('root=','%.4f'%i,'\n','迭代次数:',n,sep='')

howell55的博客 3167

影楼精修-肤色统一算法解析

本文介绍了影楼精修中肤色统一算法的实现方案,并以像素蛋糕软件为例进行详细分析。肤色统一旨在通过调整人像照片中皮肤区域的颜色,使其看起来更加均匀一致。像素蛋糕软件提供了AI肤色统一和传统肤色统一两种功能,分别适用于不同需求。传统肤色统一算法通过皮肤分割、人脸检测、亮度统一和颜色统一等步骤,实现了对皮肤区域的精细调整。文章还提供了亮度统一的核心代码,并对比了传统算法与AI算法的效果,指出AI算法在自然度和亮度矫正方面表现更优。整体而言,本文为影楼精修中的肤色统一提供了实用的技术参考。

Trent1985的专栏 2068

高级技能-高可用和容灾-两地三中心、异地多活架构

两地三中心和异地多活是当前主流的跨地域高可用架构方案。两地三中心通过生产中心、同城灾备和异地灾备的组合,提供多级容灾能力,适合对数据安全要求高的行业。异地多活则采用单元化设计,多个站点同时服务,提升资源利用率,但需解决网络延迟、数据冲突等挑战。两种架构在RTO/RPO、一致性、改造成本等方面各具特点,企业应根据业务规模、一致性要求和预算进行选择,可考虑从同城双活起步,逐步向异地多活演进。混合架构可能是平衡容灾与多活的务实方案。

zhongjianfeng100的博客 169

Python期末复习资料

Python期末复习资料

Smartloe的博客 2349

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

PYTHON入门期末复习汇总

19PYTHON期末复习 本学期共学习了python的语法,程序控制结构,列表,元组,字典,集合,字符串,函数,模块,文件及目录操作,异常处理,可视化基础.下面就将展示我期末总结. python期末复习之循环 Python 提供了for循环和while循环. for循环可以遍历任何序列的项目,如一个列表或者一个字符串循环可以遍历任何序列的项目,如一个列表或者一个字符串 if子句看起来十分熟悉。它由...

锴笑口常开的博客 2078

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Python程序设计期末复习试题集

** Python程序设计期末复习试题集 ** 注意:请弄清楚题目中涉及的知识点和题目中出现的各个函数的用法(包括函数参数的含义),判断题也有可能成为填空题。 一、判断题(错误已标记) 1.Python不允许使用关键字作为变量名,允许使用内置函数名作为变量名,但这会改变函数名的含义。 2.Python变量使用前必须先声明,并且一旦声明就不能再当前作用域内改变其类型。× 3.集合支持双向索引,-1表...

qq_45059700的博客 1万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Python 期末复习心得:从零散到体系的通关指南

Python 期末复习心得:从零散到体系的通关指南

2302_78154322的博客 563

python期末考试题库pdf_python期末复习题(必考)

《python期末复习题(必考)》由会员分享,可在线阅读,更多相关《python期末复习题(必考)(6页珍藏版)》请在金锄头文库上搜索。1、2018-2019学年第一学期python练习专业、班级:__________ 学号:____________姓名:____________Python语言基础一、单选题1.在Python中,合法的标识符是 【 】。A. _ B. 3C C. its D. s...

weixin_33782854的博客 2629

Python数据分析期末复习归纳

python数据分析期末复习 文章目录python数据分析期末复习前言一、第1、2章二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、第1、2章 分值:1~2分 python使用缩进来组织代码 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤

hughie的博客 7249

Python期末复习大纲

Python 程序设计课程,期末复习应重点覆盖基础语法、常用数据结构和算法,以及常见的编程技巧和调试方法。

小火龙的博客 1327

python期末考试复习

阶段测试1-1:Python偶遇小测验 IPO模型包括:Inpit、Process、Output PEP是一种用于改进Python功能的提案及工作模式 PEP的全称是Python Enhancement Proposals,其中Enhancement是增强改进的意思,Proposals则可译为提案或建议书,所以合起来,比较常见的翻译是Python增强提案或Python改进建议书。 示例代码: # 1-1 计算1 + 2! + 3! + ··· + 10! num = eval(input(

睿智小码农 6347
上一篇: Linux 命令行总结
下一篇: 201312-1 出现次数最多的数
郭晋龙
博客等级 码龄6年 940粉丝 449原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭晋龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值