python3基础大全

python基础

'''
字符串
'''
string = '上下五千年,是多少年'
# 字符串拼接
print(str(2021) + '_' + string)

# 计算字符串长度
print(len(string))

# 截取字符串
print(string[1:5:2])

# 翻转字符串
print(string[::-1])

# 分割字符串
print(string.split(','))

# 检索字符串出现的次数
print(string.count('年'))

# 子字符串在字符串首次出现的索引
# 不存在返回 -1
print(string.find('年'))

# 子字符串在字符串首次出现的索引
# 不能存在抛异常
print(string.index('年'))

# 检索字符串 是/否 以字符串开头
print(string.startswith('上'))

# 检索字符串 是/否 以字符串结尾
print(string.endswith('年'))

# 字母小转大
print('python'.upper())

# 字母大转小
print('PYTHON'.lower())

# 去除字符前后的空格
print(' 2021-08-08 中国 '.strip())

# 格式化字符串
print('%s %d %.2f' % ('一百年', 100, 3.1415926))
print('{} {} {:.2f}'.format('一百年', 100, 3.1415926))

# 字符串替换
print(string.replace('五千', '一万'))

'''
程序结构:
顺序 + 选择 + 循环
'''
# if...elif...else语句
score = 66
if score >= 90:
    print('非常优秀')
elif score >= 75:
    print('努力一下 更优秀')
elif score >= 60:
    print('踩在及格线上')
else:
    print('再不努力 搬砖都没人要你')

# 使用and连接条件语句
if 1 < 5 and 2 > 1:
    print('and需同时满足')

# 使用or连接条件语句
if 1<3 or 1<1:
    print('or只需满足其一即可')

# 使用not进行判断
if not True:
    print('真的就是假的')
if not False:
    print('假假得真')

# 重复一定的次数 - for循环
for i in string:
    print(i, end='')
print()

# for实现1-100之和
result = 0
for i in range(101):
    result += i
print(result)

# 条件循环 - while循环
count = 0
while count < 3:
    print(count)
    count += 1

# break终止循环
for b in ['san','si','wu']:
    if b == 'si':
        break
    print(b)

# continue结束本次循环
# 进入到下一次循环
for c in ['qi','ba','jiu']:
    if c == 'ba':
        continue
    print(c)

'''
字典:
键值对
{'石佛': '邓肯', '妖刀': '吉诺比利', '跑车': '帕克'}
'''
# 通过映射函数创建字典
nba = dict(zip(['石佛','妖刀','跑车'],['邓肯','吉诺比利','帕克']))

# 通过key访问value
print(nba['妖刀'])

# 遍历字典
for k,v in nba.items():
    print(k,v)

# 添加字典元素
nba['篮球之神'] = '乔丹'
print(nba)

# 修改字典元素
nba['篮球之神'] = 'jordan'
print(nba)

# 删除字典元素
del nba['篮球之神']
print(nba)

# 字典推导式
import random
print({i:random.randint(10,100) for i in range(1,5)})

'''
集合:
保存不重复元素
{'python','java','c++'}
'''
# set()函数创建
set1 = set([1,2,1,2,3])
print(set1)     # {1, 2, 3}

# 集合的添加
set1.add('python')
print(set1)

# 集合的删除
set1.remove(2)
print(set1)

# 集合的交集 &
print({1,2,3} & {2,3,4})

# 集合的并集 |
print({1,2,3} | {2,3,4})

# 集合的差集 -
print({1,2,3} - {1,2,3,4,5})

'''
函数:
通过将一段有规律、重复的代码定义为函数
从而达到一次编写 多次调用的目的
'''
# 函数的创建
def filterchar(string):
    '''
    过滤危险字符串
    :param string: 待过滤字符串
    :return:
    '''
    import re
    pat = r'(黑客)|(抓包)|(监听)'
    # return 指定返回值
    return re.sub(pat, '@_@',string)

# 调用函数
filter_result = filterchar('我是一名程序员,喜欢看黑客方面的资料')
print(filter_result)

# 空函数
def pass_func():
    pass
    ...

# 位置参数
# 调用时 参数个数和参数位置与定义一致
def wei_func(name,age,weight):
    print(name,age,weight)

wei_func('zhangsan', 18, 150)

# 关键字参数
# 只需要参数名正确即可
def guan_func(name='san', age=18):
    print(name,age)

guan_func(age=20,name='si')

# 为参数设置默认值
# 默认的形参必须在所有参数的最后
def mo_func(name,age,sex='男'):
    print(name,age,sex)

mo_func('wu',30)

# 元组可变参数 *parameter
def yuan_func(*name):
    for n in name:
        print(n)

yuan_func('张三','李四','王五')

# 字典可变参数 **parameter
def zi_func(**sing):
    for k,v in sing.items():
        print(k,v)

zi_func(**{'1':'麦迪','23':'乔丹','24':'科比'})

# 匿名函数
lamb = lambda x:x-1
print(lamb(5))

# 返回浮点数x的四舍五入结果
print(round(3.1415926, 2))

登录功能

'''
登录功能:
	正确时登录成功
	    成功后结束
	错误时给出提示
	    累计3次错误退出
	    每次错误给出剩余错误次数提示
'''

count = 1
while count <= 3:
    name = input('name:').strip()
    passwd = input('password:').strip()
    if name == 'china' and passwd == '2021':
        print('百年华诞')
        break
    else:
        print('用户名或密码错误,还有{}次登录机会'.format(3 - count))
        count += 1

实现打印 10到1

for i in range(1,11)[::-1]:
    print(i)

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

count = 10
while count > 0:
    print(count)
    count -= 1

读取文件后修改并重新保存

'''
读取文件
修改内容后重新保存
'''
import os

with open('a1.txt', mode='r', encoding='utf-8') as f1, \
        open('a1_副本.txt', mode='w', encoding='utf-8') as f2:
    # 判断是否可读
    print(f1.readable())
    # 判断是否可写
    print(f2.writable())
    # 一行行读
    for line in f1:
        if line == '我说的是真的':
            f2.write("你们就信吧~\n")
        f2.write(line)

os.remove('a1.txt')
os.rename('a1_副本.txt', 'a1.txt')

读取文件内容并转成字典


'''
test.txt内容
    name:apple1 price:10 amount:3 year:2020
    name:apple2 price:20 amount:2 year:2021
转成:
[{'name': 'apple1', 'price': '10', 'amount': '3', 'year': '2020'}, {...}]
'''
with open('test.txt', mode='r', encoding='utf-8') as f:
    result = []
    for line in f:  # line --> 'name:apple1 price:10 amount:3 year:2020'
        dic = {}
        lst = line.split()  # lst --> ['name:apple1', 'price:10', 'amount:3', 'year:2020']
        for e in lst:  # e --> 'name:apple1'
            ll = e.split(":")  # 'name:apple1' --> [name, apple1]
            dic[ll[0]] = ll[1]  # [name, apple1] --> {'name':'apple1'}

        result.append(dic)

print(result)

取列表中奇数索引位置的数据 组成新的列表

lst = [1,2,3,4,5,6]
# 方式1
new_lst = []
for i in range(len(lst)):
    if i % 2 == 1:
        new_lst.append(i)
print("方式1:{}".format(new_lst))
# 方式2
new_lst = lst[0::2]
print("方式2:{}".format(new_lst))
# 方式3
new_lst= lambda lst:lst[0::2]
print("方式3:{}".format(new_lst(lst)))

形参定义的顺序

'''
位置参数 *args 默认值参数 **kwargs
'''
def func(l, *args, d='haha', **kwargs):
    print(l, args, d, kwargs)  # 1 (2, 3) 4 {'c': 5, 'b': 5}


func(1, 2, 3, d=4, c=5, b=5)

实参中带* 和 **

'''
实参中带 * 先打散成位置参数 再传给形参
'''


def func(*args):  # 位置形参
    print(args)  # (1, 2, 3)


lst = [1, 2, 3]
func(*lst)  # list tuple set str

'''
实参中带 ** 先将实参打散成关键字参数  然后再传递给形参
'''


def func(**kwargs):  # 关键字形参
    print(kwargs)  # {'name': 'san', 'age': 18}


dic = {'name': 'san', 'age': 18}
func(**dic)  # dict

名称空间

'''
名称空间
    内置  全局  局部
'''

a = 20  # 全局名称空间


def func1():  # 全局名称空间
    b = 20  # 局部名称空间
    print(a)

    def func2():  # 局部名称空间
        c = 30  # 局部名称空间
        print(a)

    func2()


func1()

名称空间作用域

'''
作用域
    全局作用域:内置 + 全局命名空间
    局部作用域:局部命名空间
'''
# 查看全局作用域中的内容
print(globals())  # 可以看到  func2 b c 都没有打印出来
# {'__name__': '__main__', '__doc__': '\n名称空间\n    内置  全局  局部\n',
# '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000191C275A390>,
# '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>,
# '__file__': 'D:/works/workspace/api/study/0623/名称空间.py',
# '__cached__': None, 'a': 20, 'func1': <function func1 at 0x00000191C2703E18>}

# 查看当前作用域中的内容
print(locals())  # 在全局 与 全局内容一致 / 在局部 与 局部内容一致


def func3():
    a = 111
    def func4():
        pass
    print(locals())     
    # {'func4': <function func3.<locals>.func4 at 0x0000029E43273840>, 'a': 111}


func3()

函数嵌套

def outter():
    print("outter开始执行")

    def inner1():
        print('inner1 开始执行')

        def inner1_1():
            print("inner1_1开始执行")

        inner1_1()
        print('inner1 执行完毕')

    def inner2():
        print('inner2开始执行')

    inner2()
    inner1()


outter()
'''
运行结果:
    outter开始执行
    inner2开始执行
    inner1 开始执行
    inner1_1开始执行
    inner1 执行完毕
'''

global关键字

'''
在局部名称空间中 global 变量a 表示可以直接修改全局变量 a
如果global 变量a 在全局中不存在时 自动在全局创建一个 变量a
'''
a = 10


def func():
    global a
    a = 30


func()
print(a)  # 30

nonlocal 关键字

'''
在局部空间范围内(非全局)
从自身函数的作用范围内 一层层的往外层函数范围查找
找到则引用 并可以修改原内容
找不到则报no binding for nonlocal '变量名' found异常
'''


def outter():
    a = 10

    def inner():
        nonlocal a
        a = 20

    inner()
    print(a)  # 20


outter()

max() 和min()

def func(*args):
    '''
    传入n个数返回最大最小
    格式如下:{'max':10,'min':2}
    '''
    return {'max': max(args), 'min': min(args)}


print(func(1, 2, 6, 7, 8))  # {'max': 8, 'min': 1}

传入一个参数n 返回n得阶乘

def cal(n):
    '''
    传入一个参数n 返回n得阶乘
    例如:cal(4)  计算  4*3*2*1
    '''
    sum = 1
    while n >= 1:
        sum *= n
        n -= 1
    return sum


print(cal(4))   # 24

初始化扑克牌

def puke():
    '''
    初始化扑克牌
    '''
    result = []
    huase = ['红桃', '黑桃', '梅花', '方块']
    dianshu = [2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K', 'A']
    for hua in huase:
        for dian in dianshu:
            result.append((hua, dian))

    return result


print(puke())

形参中默认值为可变类型

def lst_add(a, lst=[]):
    '''
    形参中得默认值为 可变得数据类型
    每次使用得都是同一个(累加逻辑)
    '''

    print(id(lst))
    lst.append(a)
    return lst


ls1 = lst_add(10)
print(ls1)  # [10]
ls2 = lst_add(123, [])
print(ls2)  # [123]
ls3 = lst_add('abc')
print(ls3)  # [10, 'abc']

99乘法表

def jiujiu():
    '''
    99乘法表
    1*1=1
    ...
    9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
    '''
    for i in range(1, 10):
        for j in range(1, i + 1):
            print('{}*{}={}'.format(i, j, i * j), end=' ')
        print()  # 打印空 等于 print('', end='\n')


jiujiu()

闭包

def outter():
    '''
    闭包:在内层函数中访问外层函数得变量
    闭包得作用:
        可以保护变量不受侵害
        可以让一个变量常驻内存中
    :return:
    '''
    a = '闭包'

    def inner():
        print(a)

    print(inner.__closure__)  # 查看是否为闭包
    return inner


b = outter()
b()  # 闭包
b()  # 闭包

迭代器

'''
可迭代对象:
    所有带 __iter__ 方法得对象, 可以被for循环    
迭代器:
    可迭代对象可以使用 __iter__()方法来得到一个迭代器
    迭代器包含__iter__() 和 __next__()方法
    迭代器可以不依赖索引的方式取值
    通过__next__()方法一次只往下拿一个元素,几乎不占用内存
    一直取到直到报StopIteration为止
'''
s = '中国'
print('__iter__' in dir(s)) # True --> 表示为可迭代对象
st = s.__iter__()   # 得到一个迭代器
print(st.__next__())    # 中
print(st.__next__())    # 国
# print(st.__next__())    # StopIteration 异常

通过迭代器模拟for循环

def my_for(lst):
    '''
    通过迭代器模拟for循环
    :return:
    '''
    lt = lst.__iter__() # 转成迭代器
    while 1:
        try:
            print(lt.__next__())    # 取下一个值
        except StopIteration:
            break   # 异常则退出循环

my_for([1,2,3,4])
'''
结果:
    1
    2
    3
    4
'''

判断可迭代对象 / 迭代器

from collections import Iterable  # 可迭代对象
from collections import Iterator  # 迭代器

lst = [1, 2, 3, 4, 5]
print(isinstance(lst, Iterable))  # True
print(isinstance(lst, Iterator))  # False

lt = lst.__iter__()
print(isinstance(lt, Iterable))  # True
print(isinstance(lt, Iterator))  # True

枚举

lst = ['北京', '上海', '广州', '曹县']
for index, element in enumerate(lst):
    print(index, element)

# 等同于
for i in range(len(lst)):
    print(i, lst[i])

生成器

'''
生成器
    生成器的本质是迭代器
    方法中包含 yield 关键字 
'''


# 普通方法 一次返回10万条, 再一条一条的取
def func1():
    lst = []
    for i in range(100000):
        lst.append('衣服' + str(i))
    return lst


yi = func1()  # 占用内存大
print(yi[0])  # --> 衣服0


# 生成器方式, 每次返回一条
def func2():
    for i in range(100000000):
        yield '衣服' + str(i)


y = func2()  # 此时 不会执行函数  且占用内存小
print(y.__next__())  # 执行函数(到 第一个yield) --> 衣服0
print(y.__next__())  # 执行函数(到 下一个yield) --> 衣服1
print(y.__next__())  # 执行函数(到 再一个yield) --> 衣服2

send()

'''
send 可以往yield后传值
    在第一次执行生成器代码时 不能使用send()
    不可以给最后一个yield传值
'''


def eat():
    print('我吃什么?')
    a = yield '馒头'
    print(a)
    b = yield '香蕉'
    print(b)
    yield 789


gen = eat()  # 生成器
res1 = gen.__next__()  # 走到第一个yield '馒头'(不包含a=)
print(res1)  # 馒头
# 将水饺往第一个yield后传值 并赋值给a 然后打印a 并走到第二个yield '香蕉'
res2 = gen.send('水饺')
print(res2)  # 香蕉
# 将哈密瓜往第二个yield后传值 并赋值给b 然后打印b 并走到最后一个yield 789
res3 = gen.send('哈密瓜')
print(res3)  # 789

列表推导式

'''
列表推导式
    语法:[value for循环 条件筛选]
'''
# 普通方式
lst = []
for i in range(5,10):
    lst.append('神州{}号'.format(i))
print(lst)  # ['神州5号', '神州6号', '神州7号', '神州8号', '神州9号']

# 列表推导式
lst = ['神州{}号'.format(i) for i in range(5,10)]
print(lst)  # ['神州5号', '神州6号', '神州7号', '神州8号', '神州9号']

# 练习:10以内 除以3的数的平方
lst = ['{}的平方 {}'.format(i, i*i) \
		for i in range(10) if i%3==0 and i > 0]
print(lst)  # ['3的平方 9', '6的平方 36', '9的平方 81']

# 练习升级:两层列表统计 张姓名字
# 普通方式
names = [['张三','李四','张二蛋'],
         ['王五','老六','张飞']]
lst = []
for line in names:
    for name in line:
        if name.startswith('张'):
            lst.append(name)
print(lst)  # ['张三', '张二蛋', '张飞']

# 列表推导式
lst = [name for line in names \
		for name in line if name.startswith('张')]
print(lst)  # ['张三', '张二蛋', '张飞']

字典推导式

'''
字典推导式
    语法:{key:value for循环 条件筛选 }
'''
# [11,22,33]  --> {0:11, 1:22, 2:33}
lst = [11, 22, 33]
dic = {k: v for k, v in enumerate(lst)}
print(dic)  # {0: 11, 1: 22, 2: 33}

lambda

'''
lambda匿名函数
'''
# 普通方法实现
def func(n):
    return n * n


a = func(5)
print(a)  # 25
print(func.__name__)  # func

# 匿名方法实现
b = lambda n: n * n
print(b(6))  # 36
print(b.__name__)  # <lambda>

# lambda 处理字典实例
dic = {'希望': '0.0036', '市民': '0.0026', '居民': '0.0040'}
# 按照字典的value 默认升序排
dic1 = sorted(dic.items(), key=lambda item: item[1])
print(dic1)  # [('市民', '0.0026'), ('希望', '0.0036'), ('居民', '0.0040')]
# 按照字典的value 降序排
dic2 = sorted(dic.items(), key=lambda item: item[1], reverse=True)
print(dic2)  # [('居民', '0.0040'), ('希望', '0.0036'), ('市民', '0.0026')]

# 将字典内容格式化输出
for v in dic2:
    print('{}:{:.2f}'.format(v[0], float(v[1]) * 100), end=' ')

'''
运行结果:
	居民:0.40 希望:0.36 市民:0.26 
'''

sorted()

'''
sorted() 排序
    iterable:可迭代的
    key:把可迭代对象中的每个元素拿出来 交给key
    reverse:正序 / 倒序 
'''
lst = ['张三', '张利斯', '王张利斯', '六王张利斯', '周年']


def func(n):
    return len(n)


ls = sorted(lst, key=func)
print(ls)  # ['张三', '周年', '张利斯', '王张利斯', '六王张利斯']

ls = sorted(lst, key=func, reverse=True)
print(ls)  # ['六王张利斯', '王张利斯', '张利斯', '张三', '周年']

filter()

'''
filter() 过滤
    function: 方法名
    iterable: 可迭代的
'''
ls = ['张无忌', '张三丰', '乔峰', '郭靖', '狗蛋']


def func(name):
    # if name[0] == '张':
    if name.startswith('张'):
        return False
    else:
        return True


# 将ls中的每一项传递给func,然后将True的保留,Flase的过滤掉
# f = filter(func, ls)
f = filter(lambda name: not name.startswith('张'), ls)

print('__iter__' in dir(f))  # True  可迭代
for name in f:
    print('filter过滤后的符合的姓名为:{}'.format(name))

map()

'''
map() 映射
'''
ls = [1, 2, 3, 7, 8, 9]
def func(num):
    return num * num

# 把后面可迭代对象中的每个元素拿出来交给func, 返回的是func的执行结果
# m = map(func, ls)
m = map(lambda num: num ** 2, ls)
print('__iter__' in dir(m))
print(list(m))  # [1, 4, 9, 49, 64, 81]

# 实际使用情况(分而治之)
map(func, map(func, map(func, ls)))

re

import re

str = "192.0.0.1?!289.0.0.1!0.0.0.0!192.163.10.28?192.0.0.1"

# 切割成ip列表
ip_list = re.split('\?!|!|\?', str) # ?在re中为非贪婪模式,需转义
# 按ip最后一位排序
ip_list = sorted(ip_list, key=lambda v: v[-1])
# 打印结果
print(ip_list)

继续复习补充中,参考B站
python全栈开发 (完整共145天)【学完可以就业】
https://www.bilibili.com/video/BV1PA411x72W?p=46&spm_id_from=pageDriver

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值