当前位置: 首页 > news >正文

python实例代码介绍python基础知识

TODO: 知识点仍有待整理

import

使用 import 关键字可以让你选择性地导入所需的模块,而不必导入整个模块库。这样可以减少内存占用和加载时间,尤其是当你只需要使用模块中的某些功能时。

同时,使用 import 可以提高代码的可读性和可维护性,因为你可以明确指定所需的模块,而不必导入整个库。

另外,使用 import 还可以避免命名冲突。如果你导入整个库,可能会有一些与你自己的代码冲突的名称。但是,如果你只导入所需的模块,你可以更好地控制命名空间,避免冲突。

#!/usr/bin/env python3
#-*- coding: utf-8 -*-# 开头都建议添加python解释器和编码声明
# 第一行注释是为了告诉 Linux/OS X 系统,这是一个 Python 可执行程序,Windows 系统会忽略这个注释
# 第二行注释是为了告诉 Python 解释器,按照 UTF-8 编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。
# 申明了 UTF-8 编码并不意味着你的.py 文件就是 UTF-8 编码的,必须并且要确保文本编辑器正在使用 UTF-8 without BOM 编码
# 如果.py文件本身使用 UTF-8 编码,并且也申明了# -*- coding: utf-8 -*-,打开命令提示符测试就可以正常显示中文# 运行脚本时带入参数,可以在main函数中用sys模块的argv获取参数值,len(sys.argv)获取参数个数
# 如果没带参数,len(sys.argv)默认是1,表示本身自带参数为当前脚本的完整路径
# 如:C:\Users\HYSYB-WANGWEIDA\Desktop\PLCN1证书检查工具\PLCN1证书检查工具.py
#if __name__ == '__main__':
#    import sys
#    args = sys.argv, args[1]为带的第一个参数
#    argc = len(sys.argv)
import argparseparser = argparse.ArgumentParser()
parser.add_argument("loc", type=str)
parser.add_argument('loc2', type=str, default="5555")
parser.add_argument('--b', type=int, default=0)
parser.add_argument('-n', "--number", type=str, help='输入一个数字')  --此时n是number的缩写,参数会存在number中,而不是n中
args = parser.parse_args()print(args.loc, type(args.loc))
print(args.loc2, type(args.loc2))
print(args.b, type(args.b))
print(args.number, type(args.number))# 执行python test.py  --b=1 --number=2 3 5# 打印数据
info = " hello python "
print(info)
print("首字母大写输出:" + info.title())
print("全部大写输出:" + info.upper())
print("去除空格l-left,r-right,或两边空格:" + info.lstrip())
print('转义字符:"打印有双引号,外面就用单引号,反过来同理"')
print("""打印可以用三引号三引号支持换行!!!""")
print("\t这个是tab和回车 \n")
print_string_a = "string a"
print_int_b = 100
print(f'string a is: {print_string_a}, int b is : {print_int_b:.1f}')   # 类似于printf("a:%s,b:%.1f", a, b)
print("string a is: %s int b is:%d\n" % (print_string_a, print_int_b))
print(r'\t\n利用r参数这些转义字符不转义')
print(print_string_a.ljust(5,'*') + "用.ljust(5,*)表示左对齐并占五个空白字符空间,后面空格用*号替代,同理可以用.center表示居中对齐, .rjust右对齐")# 字符串拼接
info1 = "hello"
info2 = "world"
combine_info = info1 + " " + info2
print(combine_info)# 字符串判断,判断string是否是str开头的,返回从0开始的位置
string.startswith('str')# 去空格及特殊符号s.strip().lstrip().rstrip(',')
Python strip() 方法用于移除字符串头尾指定的字符(默认为空格)。# 复制字符串
#strcpy(sStr1,sStr2)
sStr1 = 'strcpy'
sStr2 = sStr1
sStr1 = 'strcpy2'
print sStr2# 连接字符串
#strcat(sStr1,sStr2)
sStr1 = 'strcat'
sStr2 = 'append'
sStr1 += sStr2
print sStr1# 查找字符
#strchr(sStr1,sStr2)
# < 0 为未找到
sStr1 = 'strchr'
sStr2 = 's'
nPos = sStr1.index(sStr2)
print nPos# 比较字符串
#strcmp(sStr1,sStr2)
sStr1 = 'strchr'
sStr2 = 'strch'
print cmp(sStr1,sStr2)# 扫描字符串是否包含指定的字符
#strspn(sStr1,sStr2)
sStr1 = '12345678'
sStr2 = '456'
#sStr1 and chars both in sStr1 and sStr2
print len(sStr1 and sStr2)# 字符串长度
#strlen(sStr1)
sStr1 = 'strlen'
print len(sStr1)# 将字符串中的大小写转换
#strlwr(sStr1)
sStr1 = 'JCstrlwr'
sStr1 = sStr1.upper()
#sStr1 = sStr1.lower()
print sStr1# 追加指定长度的字符串
#strncat(sStr1,sStr2,n)
sStr1 = '12345'
sStr2 = 'abcdef'
n = 3
sStr1 += sStr2[0:n]
print sStr1# 字符串指定长度比较
#strncmp(sStr1,sStr2,n)
sStr1 = '12345'
sStr2 = '123bc'
n = 3
print cmp(sStr1[0:n],sStr2[0:n])# 复制指定长度的字符
#strncpy(sStr1,sStr2,n)
sStr1 = ''
sStr2 = '12345'
n = 3
sStr1 = sStr2[0:n]
print sStr1# 将字符串前n个字符替换为指定的字符
#strnset(sStr1,ch,n)
sStr1 = '12345'
ch = 'r'
n = 3
sStr1 = n * ch + sStr1[3:]
print sStr1# 扫描字符串
#strpbrk(sStr1,sStr2)
sStr1 = 'cekjgdklab'
sStr2 = 'gka'
nPos = -1
for c in sStr1:if c in sStr2:nPos = sStr1.index(c)break
print nPos# 翻转字符串
#strrev(sStr1)
sStr1 = 'abcdefg'
sStr1 = sStr1[::-1]
print sStr1# 查找字符串
#strstr(sStr1,sStr2)
sStr1 = 'abcdefg'
sStr2 = 'cde'
print sStr1.find(sStr2)# 分割字符串
#strtok(sStr1,sStr2)
sStr1 = 'ab,cde,fgh,ijk'
sStr2 = ','
sStr1 = sStr1[sStr1.find(sStr2) + 1:]
print sStr1
#或者
s = 'ab,cde,fgh,ijk'
print(s.split(','))# 连接字符串
delimiter = ','
mylist = ['Brazil', 'Russia', 'India', 'China']
print delimiter.join(mylist)# 取关键字到末尾的字符串
start_pos=string.find('keyword')
f.write('%s\n' % string[start_pos:])# 数字的字符化
age = 23
print("age:" + str(age) + " half is:" + str(23/2))    # 不加str会报错,py不知道是字符2和3,还是数字23,但是可以单独打印print(age)# 列表(数组)
name = ["jane", "mike", "michael"]    # []内可为空内容
print(name)
print("列表元素0:" + name[0] + ", 最后一个元素:" + name[-1])    # 通过下标访问,-1表示最后一个元素,-2表示倒数第二个,以此类推name[0] = "jane1"
print("修改后的name0元素:" + name[0])name.append("append name")
print("添加元素后的列表:" + str(name))name.insert(0, "insert name")
print("插入元素后的列表:" + str(name))del name[0]
print("删除了元素0后的列表:" + str(name))
name.pop(0)    # pop和del可以认为是一个意思
print("删除了元素0后的列表:" + str(name))
name.remove("mike")
print("通过值mike来删除元素:" + str(name))name.sort(reverse=True)
print("按字母逆排序元素:" + str(name))
name.sort()    # sort会永久修改列表
print("按字母排序元素:" + str(name))
print("临时排序:" + str(sorted(name, reverse=True)))    # sorted只会临时修改元素顺序,执行后name还是会恢复原来顺序
print("还是原来的顺序:" + str(name))name.insert(0, "mike")
name.reverse()
print("逆序输出:" + str(name))print("列表长度:" + str(len(name)))num_list = list(range(0, 6))
print("数字转列表:" + str(num_list))print("取范围内的元素:" + str(num_list[1:3]))    # 从num_list[1]开始取值,取3-1个
print("取范围内的元素:" + str(num_list[:3]))    # 从开始取值,取3-0个copy_name = name
print("列表可以直接赋值,但是如果修改了name或copy_name,都会导致两个变量值的改变\n")
copy1_name = name[:]
print("通过类似切片:的方式,可以创建副本并给赋值的变量,这样就是两个独立的变量了\n")if name:print("列表不为空")
else:print("列表是空的")# for循环的使用
students = ["stu1", "stu2", "stu3"]
for stu in students:    # 赋值给stu,并打印print(stu)
print("缩进代表着该行的代码与上一个未缩进的行的代码是一起的\n")for value in students[0:2]:print(value)# 不用变量,只要循环
for _ in range(3, num_params):pattern = pattern + r',\s*(.*)'# 元组(不可修改的数组)
dimensions = (1, 2, 3, 4, 5)
print(dimensions)
print(dimensions[0])
# dimensions[0] = 2 # 这样将提示出错
dimensions = (6, 7, 8, 9)    # 不能改元素值,但是可以重新赋值变量
print(dimensions)# if条件语句的使用
cars = ['audi', 'bmw', 'subaru', 'toyota']
for car in cars:if car == 'bmw':    # 不等于用 !=,如果多个条件就用 and/or/ ,(a==a) and (b==b)print(car.upper())else:print(car.title())if 'audi' not in cars:    # not的用法print("audi not in cars\n")
elif 'bmw' in cars:print("bmw in cars\n")
else:    # 可以不用print()# 一个顾客点披萨加配料检查的例子
available_toppings = ['mushrooms', 'olives', 'green peppers', 'pepperoni', 'pineapple', 'extra cheese']
requested_toppings = ['mushrooms', 'french fries', 'extra cheese']
for requested_topping in requested_toppings:if requested_topping in available_toppings:print("Adding " + requested_topping + ".")else:print("Sorry, we don't have " + requested_topping + ".")
print("\nFinished making your pizza!")# 字典,类似二维数组
bike_0 = {'color': 'red', 'price': '1000'}
print("bike 0 color is: " + bike_0['color'])bike_0['size'] = 100
print("添加键值对:" + str(bike_0))bike_0['size'] = 50
print("修改字典值:" + str(bike_0))del bike_0['size']
print("删除字典值size:" + str(bike_0))# 注意,即便遍历字典时,键—值对的返回顺序也与存储顺序不同。 Python不关心键—值对的存储顺序,而只跟踪键和值之间的关联关系
print("遍历字典")
for key, value in bike_0.items():print("key: " + key + " value: " + value)
for name in bike_0.keys():print(".key方式获取关键字:" + name)
for name in bike_0.values():print(".values方式获取值:" + name)bike_1 = {'color': 'blue', 'price': '500'}
bikes = [bike_0, bike_1]
print("字典嵌套")
for bike in bikes:print(bike)# 在字典中存储列表
bike_3 = {'size': '100','color': ['yellow', 'white']    # 这就是列表
}
for bike_3_color in bike_3['color']:print("bike_3 color: " + bike_3_color)# 也有字典中嵌套字典的,这个稍复杂一点点,举个例子好了
users = {'user1': {'first': 'albert','last': 'einstein','location': 'princeton',},'user2': {'first': 'marie','last': 'curie','location': 'paris',},
}
for username, user_info in users.items():print("\nUsername: " + username)full_name = user_info['first'] + " " + user_info['last']location = user_info['location']print("\tFull name: " + full_name.title())print("\tLocation: " + location.title())# 用户输入数据
# input输入时默认就是字符串,要变成数字需要转化处理
# age = input("please tell me your age: ")
age = '100'
print("your age is: " + age)
age = int(age)    # float也是类似用法
print("当前age是数字:" + str(age))
# test_num = int(input('input num:'))  # 也可以输入时指定类型# while循环用法
current_number = 1
while current_number <= 5:print(current_number)current_number += 1if current_number > 3:breakelse:continue# 函数用法
def greet(username, user_age=50):""" 三个双引号表示函数功能描述,Python使用它们来生成有关程序中函数的文档 """# 井号也是可以用的print("函数用法:hello " + username + " age: " + str(user_age))return Trueret = greet('mike', 100)
ret = greet(username='mike', user_age=100)
ret = greet(user_age=100, username='mike')  # 指名形参,就可以不按照顺序赋值# 传递任意数量的实参,有点像指针
def make_pizza(*toppings):"""打印顾客点的所有配料"""print(toppings)make_pizza('pepperoni')make_pizza('mushrooms', 'green peppers', 'extra cheese')def make_pizza_2(size, *toppings):"""概述要制作的比萨"""print("\nMaking a " + str(size) +"-inch pizza with the following toppings:")for topping in toppings:print("- " + topping)
make_pizza_2(16, 'pepperoni')
make_pizza_2(12, 'mushrooms', 'green peppers', 'extra cheese')# 将函数存储在模块中
# 将函数存储在独立文件中后,可与其他程序员共享这些文件而不是整个程序
# 比如将制作披萨的函数make_pizza()放在pizza.py中
# 新建making_pizza.py,在第一行通过import pizza,就可以导入模块,再通过pizza.make_pizza()进行调用# 也可以导入模块中指定的函数,包括多个函数
# 通过 from pizza import make_pizza1, make_pizza2 来实现,调用时直接用函数 make_pizza() 调用# 导入的函数名和现有的名称有冲突怎么办?
# 通过导入时用as解决,具体如下:
# from pizza import make_pizza as mp
# 调用时:mp()# as同样可以给模块起别名,如下:
# from pizza as p
# 调用时:p.make()# 导入模块中的所有函数
# from pizza import *# 类的使用
class Human:  # 类的首字母是大写"""人类动作""""""__init__()是一个特殊的方法,每当你根据Dog类创建新实
例时, Python都会自动运行它。在这个方法的名称中,开头和末尾各有两个下划线,这是一种约
定,旨在避免Python默认方法与普通方法发生名称冲突。
我们将方法__init__()定义成了包含三个形参: self、 name和age。在这个方法的定义中,形
参self必不可少,还必须位于其他形参的前面。为何必须在方法定义中包含形参self呢?因为
Python调用这个__init__()方法来创建Dog实例时,将自动传入实参self。每个与类相关联的方法
调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。
我们创建Dog实例时, Python将调用Dog类的方法__init__()。我们将通过实参向Dog()传递名字和
年龄; self会自动传递,因此我们不需要传递它。每当我们根据Dog类创建实例时,都只需给最
后两个形参( name和age)提供值。"""def __init__(self, human_name, human_age):"""初始化属性name和age"""self.human_name = human_nameself.human_age = human_age# 类中的每个属性都必须有初始值,哪怕这个值是0或空字符串self.country = ""self.weight = 65def sit(self):print(self.human_name.title() + " is now sitting")def run(self):print(self.human_name.title() + " is running")def read_country(self):print("country is: " + self.country)def update_weight(self, weight):self.weight = weightdef read_weight(self):print("weight is: " + str(self.weight))"""
遇到这行代码时, Python使用实参'mike'和100,调用Human类中的方法__init__()。
方法__init__()创建一个表示特定人的示例,并使用我们提供的值来设置属性human_name和human_age。
方法__init__()并未显式地包含return语句,但Python自动返回一个表示这个人的实例。我们将这个实例存储在变量man1中。
"""
man1 = Human("mike", 100)
print("man name is: " + man1.human_name + ", age: " + str(man1.human_age))
# 调用类的方法
man1.sit()
man1.run()man1.read_country()
man1.country = "china"
man1.read_country()man1.read_weight()
man1.update_weight(70)
man1.read_weight()# 类的继承
"""
编写类时,并非总是要从空白开始。如果你要编写的类是另一个现成类的特殊版本,可使用
继承。一个类继承另一个类时,它将自动获得另一个类的所有属性和方法;原有的类称为父类,
而新类称为子类。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。创建子类的实例时, Python首先需要完成的任务是给父类的所有属性赋值。为此,子类的方
法__init__()需要父类施以援手。
"""class AutoCar:"""一次模拟汽车的简单尝试"""def __init__(self, make, model, year):self.make = makeself.model = modelself.year = yearself.odometer_reading = 0def get_descriptive_name(self):long_name = str(self.year) + ' ' + self.make + ' ' + self.modelreturn long_name.title()def read_odometer(self):print("This car has " + str(self.odometer_reading) + " miles on it.")def update_odometer(self, mileage):if mileage >= self.odometer_reading:self.odometer_reading = mileageelse:print("You can't roll back an odometer!")def increment_odometer(self, miles):self.odometer_reading += milesclass Battery1:"""电瓶的属性"""def __init__(self, battery_size1=70):self.battery_size1 = battery_size1def describe_battery(self):"""打印一条描述电瓶容量的消息"""print("This car has a " + str(self.battery_size1) + "-kWh battery.")class ElectricCar(AutoCar):"""电动汽车的独特之处"""def __init__(self, make, model, year):"""初始化父类的属性"""# 给父类的所有属性赋值,必须执行,通过super实现初始化,父类也称为超类( superclass),名称super因此而得名super().__init__(make, model, year)# 接下来定义电动汽车子类特有的属性self.battery_size = 70# 如果类的属性或方法太多,可以拎出来封装成新的类,然后再赋值给原来类的属性self.battery1 = Battery1()def show_battery_size(self):print("battery size: " + str(self.battery_size))# 父类的方法也是可以重写的,但是要和父类里面的方法名一样,比如重写read_odometerdef read_odometer(self):print("can not read_odometer")my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.show_battery_size()# 如果类的属性或方法太多,可以拎出来封装成新的类,然后再赋值给原来类的属性
my_tesla.battery1.describe_battery()# 类的模块化
# 和函数的模块化一样,比如在car.py中添加了一个类Car,在my_car.py中通过以下代码就可以导入
# from car import Car
# 使用时就用:my_new_car = Car('bmw', '525li', 2022)
# 类模块也可以导入其他的类模块# 文件操作与异常
# 读出全部内容
with open('read_write_test_file/file_read.txt') as file_object:content = file_object.read()print("read file, content: \n"+ content)# 只管用with open打开,不用close关闭,python会自己确定关闭的时机# file_object.close()"""虽然没有close,但下面不能再用file_object了,估计是因为python已经把文件关了,读出来都是空的for line in file_object:print(line.rstrip())"""
#删除文件和目录,删除目录需要导入import shutil
if os.path.isdir(cert_path):shutil.rmtree(cert_path)print("delete " + cert_path)
if os.path.isfile(expired_list_file):os.unlink(expired_list_file)print("delete " + expired_list_file)# 逐行读取
with open('read_write_test_file/file_read.txt') as file_object:for line in file_object:print(line.rstrip())# 逐行读取到列表中
with open('read_write_test_file/file_read.txt') as file_object:lines = file_object.readlines()for line in lines:print(line)  # 可以用rstrip去掉空行# 读取超大文件,python对文件大小没有限制,只要内存够,多大数据都可以# 判断文件中是否包含某个关键字
with open('read_write_test_file/file_read.txt') as file_object:lines = file_object.readlines()file_string = ""
for line in lines:file_string += line.rstrip()print(lines)
print(file_string)
keyword = "123"
if keyword in file_string:print("yes, appears in the file ")
else:print("no, not appears in the file")# 写入文件
with open('read_write_test_file/file_read.txt', 'a') as file_object:file_object.write("\nwrite words")
with open('read_write_test_file/file_read.txt') as file_object:content = file_object.read()print(content)# 异常,try-except代码块的使用
try:print(5/0)
except ZeroDivisionError:print("You can't divide by zero!")# 如果不提示错误信息,让用户感知不到,就用pass语句代替打印,如下:# pass# 举个文件不存在的例子
try:with open('file_name') as f_obj:contents = f_obj.read()
# 这边知道错误的类型是FileNotFoundError,如果不知道错误的类型名,不能随便写,否则会报错,可以直接写except Exception:
except FileNotFoundError:msg = "Sorry, the file does not exist."print(msg)# 让用户选择文件作为路径import tkinter as tkfrom tkinter import filedialog# 实例化root = tk.Tk()root.withdraw()# 获取文件夹路径xls_file = filedialog.askopenfilename()print('\n获取的文件地址:', xls_file)# 解压和压缩tar gz文件
import os
import tarfile
import gzip# 一次性打包整个根目录。空子目录会被打包。
# 如果只打包不压缩,将"w:gz"参数改为"w:"或"w"即可。
def make_targz(output_filename, source_dir):with tarfile.open(output_filename, "w:gz") as tar:tar.add(source_dir, arcname=os.path.basename(source_dir))# 逐个添加文件打包,未打包空子目录。可过滤文件。
# 如果只打包不压缩,将"w:gz"参数改为"w:"或"w"即可。
def make_targz_one_by_one(output_filename, source_dir):tar = tarfile.open(output_filename, "w:gz")for root, dir, files in os.walk(source_dir):for file in files:pathfile = os.path.join(root, file)tar.add(pathfile)tar.close()def un_gz(file_name):"""ungz zip file"""f_name = file_name.replace(".gz", "")# 获取文件的名称,去掉g_file = gzip.GzipFile(file_name)# 创建gzip对象open(f_name, "wb+").write(g_file.read())# gzip对象用read()打开后,写入open()建立的文件里。g_file.close()  # 关闭gzip对象def un_tar(file_name):# untar zip filetar = tarfile.open(file_name)names = tar.getnames()if os.path.isdir(file_name + "_files"):passelse:os.mkdir(file_name + "_files")# 由于解压后是许多文件,预先建立同名文件夹for name in names:tar.extract(name, file_name + "_files/")tar.close()if __name__ == '__main__':make_targz('test.tar.gz', "E:python_samplelibs")make_targz_one_by_one('test01.tgz', "E:python_samplelibs")un_gz("test.tar.gz")un_tar("test.tar")# 弹窗
# 先安装win32api模块:pip install pywin32
import win32api
import win32coninfo = '弹窗'
print(info)
win32api.MessageBox(None, info, "提示", win32con.MB_OK)

相关文章:

python实例代码介绍python基础知识

TODO: 知识点仍有待整理 import 使用 import 关键字可以让你选择性地导入所需的模块&#xff0c;而不必导入整个模块库。这样可以减少内存占用和加载时间&#xff0c;尤其是当你只需要使用模块中的某些功能时。 同时&#xff0c;使用 import 可以提高代码的可读性和可维护性&…...

【每日一题】掷骰子等于目标和的方法数

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;动态规划 写在最后 Tag 【动态规划】【数组】 题目来源 1155. 掷骰子等于目标和的方法数 题目解读 你手里有 n 个一样的骰子&#xff0c;每个骰子都有 k 个面&#xff0c;分别标号 1 到 n。给定三个整数 n&#xff0…...

霸王条款惹品牌争议,京东双11站在商家对立面?

作者 | 江北 来源 | 洞见新研社 双11活动第一天&#xff0c;京东就站上了风口浪尖。 与烘焙烤箱品牌海氏的话题接连登上微博热搜&#xff0c;海氏控诉京东滥用市场竞争地位&#xff0c;破坏市场竞争秩序。在海氏的声明中&#xff0c;京东的行为让吃瓜群众大开眼界&#xff1a…...

深度神经网络为何成功?其中的过程、思想和关键主张选择

LeNet&#xff08;1989&#xff09;在小数据集上取得了很好的效果&#xff0c;但是在更大、更真实地数据集上训练卷积神经网络地性能和可行性还有待研究。 与神经网络竞争的是传统机器学习方法&#xff0c;比如SVM&#xff08;支持向量机&#xff09;。这个阶段性能比神经网络方…...

什么是服务器节点?

一.服务器节点的概念&#xff1a; 服务器节点是一种服务器装置&#xff0c;节点服务器是针对服务器集群来说的。主要应用在WEB、FTP等等的服务上。所以节点服务器并不是单指某一种服务器。它由多个节点和管理装置整体的管理单元构成&#xff0c;其特征在于&#xff1a;各节点具…...

水电站与数据可视化:洞察未来能源趋势的窗口

在信息时代的浪潮中&#xff0c;数据可视化正成为推动能源领域发展的重要工具。今天&#xff0c;我们将带您一起探索水电站与数据可视化的结合&#xff0c;如何成为洞察未来能源趋势的窗口。水电站作为传统能源领域的重要组成部分&#xff0c;它的运行与管理涉及大量的数据。然…...

Mac运行Docker报错

Mac运行Docker报错 &#x1f4d4; 千寻简笔记介绍 千寻简笔记已开源&#xff0c;Gitee与GitHub搜索chihiro-notes&#xff0c;包含笔记源文件.md&#xff0c;以及PDF版本方便阅读&#xff0c;且是用了精美主题&#xff0c;阅读体验更佳&#xff0c;如果文章对你有帮助请帮我点…...

代码 $(“.btn“).click(function(){ 和代码 $(document).ready(function() 有啥区别?

看下面的内容前可以先看下博文&#xff1a;https://blog.csdn.net/wenhao_ir/article/details/134029389 $(".btn").click(function(){...}) 和 $(document).ready(function(){...}) 是两种不同的 jQuery 事件处理方式&#xff0c;它们有不同的用途和时机&#xff1…...

【nodejs脚本】为文件夹中的所有node项目执行命令 npm install 并收集error日志

目录 im 下有很多的node项目&#xff0c;我需要批量为这些项目执行 npm install&#xff0c;另外npm的error信息需要单独收集至log文件中 var fs require(fs); var util require(util); var exec util.promisify(require(child_process).exec);var projectsDirectory .; v…...

非父子组件通信-发布订阅模式

发布订阅模式其实与vue无关&#xff0c;完全是ES6的代码&#xff0c;但是它可以通过这种模式实现非父子组件的通信 store.js文件 首先创建一个store.js文件&#xff0c;用于提供发布与订阅方法 export default {datalist: [], //存放带一个参数的函数集合//订阅subscribe(fu…...

iPhone手机分辨率整理

手机机型(iPhone)屏幕尺寸 (inch)逻辑分辨率(pt)设备分辨率(px)缩放因子(Scale Factor)竖屏安全区域(safeAreaInsets)纵横比(Aspect ratio)像素密度(ppi)2G/3G/3GS3.5320*480320*4801xtop:20 bottom:03&#xff1a;21654/4(s)3.5320*480640*9602xtop:20 bottom:016&#xff1a;…...

【linux】SourceForge 开源软件开发平台和仓库

在linux上面安装服务和工具。我们经常会下载安装包。今天推荐一个网站。 SourceForge 开源软件开发平台和仓库 ​ 全球最大开源软件开发平台和仓库 SourceForge.net&#xff0c;又称SF.net&#xff0c;是开源软件开发者进行开发管理的集中式场所。 SourceForge.net由VA Softwa…...

LabVIEW应用开发——控件的使用(四)

接上文&#xff0c;这篇介绍时间控件。 LabVIEW应用开发——控件的使用&#xff08;三&#xff09; 1、时间控件Time Stamp control 在日常软件开发场景中&#xff0c;时间也是一种常用的控件&#xff0c;用于表达当前时间的显示、对下设置时间、时间同步等等场景。LabVIEW专门…...

MySQL - mvcc

mvcc 是什么&#xff1f; MVCC&#xff08;多版本并发控制&#xff09;是一种数据库并发控制机制&#xff0c;旨在提高数据库的并发性&#xff0c;避免锁定操作&#xff0c;从而减少等待和提高性能。MVCC 主要解决数据库读写操作之间的线程安全问题。 MVCC 主要有两种读取数据…...

SpringMVC 异常处理器

1、基于配置的异常处理 SpringMVC提供了一个处理控制器方法执行过程中所出现的异常的接口&#xff1a;HandlerExceptionResolver HandlerExceptionResolver接口的实现类有&#xff1a;DefaultHandlerExceptionResolver和SimpleMappingExceptionResolver SpringMVC提供了自定…...

迷你洗衣机哪个牌子好又实惠?内裤洗衣机热销前四榜单

小型内裤洗衣机是一款很实用的家用电器&#xff0c;非常适合住在小户型的房子里&#xff0c;或者经常要出差的人。所以&#xff0c;买什么牌子的内衣洗衣机比较好&#xff1f;目前市场上各品牌各有各的特色及应用场合&#xff0c;例如适合于贴身衣物如内衣、内裤、婴儿衣物清洗…...

SOCKS5代理与网络安全:如何安全地进行爬虫操作

随着网络技术的不断发展&#xff0c;代理技术在网络安全和数据爬取中扮演着越来越重要的角色。本文将重点介绍SOCKS5代理、SK5代理和IP代理的基本概念&#xff0c;以及如何在保证网络安全的前提下&#xff0c;利用这些技术进行有效的爬虫操作。 1. SOCKS5代理与SK5代理 SOCKS…...

onebound电商API接口商品数据采集平台:让数据成为生产力!

随着数字化商业时代的到来&#xff0c;API接口已成为电商资源连接利器&#xff0c;也是全球传统互联网企业转型的基础。 2021年 Google Cloud 研究显示&#xff0c;全球互联网企业近3/4的企业持续投入数字化转型&#xff0c;2/3的企业在持续增加投入&#xff0c;从这组数据可以…...

Kafka磁盘写满日志清理操作

最近项目组的kafka集群&#xff0c;老是由于应用端写入kafka topic的消息太多&#xff0c;导致所在的broker节点占满&#xff0c;导致其他的组件接连宕机。 这里和应用端沟通可以删除1天之前的消息来清理磁盘&#xff0c;并且可以调整topic的消息存活时间。 一、调整Topic的消…...

SSL证书:网络通信安全的基石

随着互联网的深入发展和电子商务的普及&#xff0c;网络安全问题变得越来越重要。SSL证书作为保障网络通信安全的重要组成部分&#xff0c;扮演着至关重要的角色。本文将深入剖析SSL证书的底层原理、作用、应用场景以及优缺点&#xff0c;帮助您更好地理解网络通信安全。 一、…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

【Linux】Linux安装并配置RabbitMQ

目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的&#xff0c;需要先安…...

[特殊字符] 手撸 Redis 互斥锁那些坑

&#x1f4d6; 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作&#xff0c;想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁&#xff0c;也顺便跟 Redisson 的 RLock 机制对比了下&#xff0c;记录一波&#xff0c;别踩我踩过…...

网页端 js 读取发票里的二维码信息(图片和PDF格式)

起因 为了实现在报销流程中&#xff0c;发票不能重用的限制&#xff0c;发票上传后&#xff0c;希望能读出发票号&#xff0c;并记录发票号已用&#xff0c;下次不再可用于报销。 基于上面的需求&#xff0c;研究了OCR 的方式和读PDF的方式&#xff0c;实际是可行的&#xff…...

C++ 类基础:封装、继承、多态与多线程模板实现

前言 C 是一门强大的面向对象编程语言&#xff0c;而类&#xff08;Class&#xff09;作为其核心特性之一&#xff0c;是理解和使用 C 的关键。本文将深入探讨 C 类的基本特性&#xff0c;包括封装、继承和多态&#xff0c;同时讨论类中的权限控制&#xff0c;并展示如何使用类…...

python基础语法Ⅰ

python基础语法Ⅰ 常量和表达式变量是什么变量的语法1.定义变量使用变量 变量的类型1.整数2.浮点数(小数)3.字符串4.布尔5.其他 动态类型特征注释注释是什么注释的语法1.行注释2.文档字符串 注释的规范 常量和表达式 我们可以把python当作一个计算器&#xff0c;来进行一些算术…...