Python 基础语法介绍(二)

news2024/11/23 8:11:42

文章目录

    • 一、概述
    • 二、函数
      • 1)函数定义
      • 2)函数调用
      • 3)函数传参
        • 1、形式参数和实际参数
        • 2、关键字参数
        • 3、参数默认值
        • 4、可变参数
      • 4)函数返回值
        • 1、语法结构
        • 2、多值返回
      • 5)变量作用域
        • 1、局部变量
        • 2、全局变量
          • 【1】在主程序中定义全局变量
          • 【2】 使用global关键字在函数中声明全局变量
      • 6)匿名函数(lambda)
        • 1、匿名函数的定义
        • 2、序列调用匿名方法
      • 7)常用内置函数
    • 三、python 模块
      • 1)导入模块
        • 1、第一种方式:import 模块名
        • 2、第二种方式:import 模块名 as 别名
        • 3、第三种方式:from 模块名 import 函数名
      • 2)自定义模块和导入模块
        • 1、自定义模块
        • 2、调用自定义模块
    • 四、异常处理和程序调试
      • 1)异常处理 try...except
      • 2)手动抛出异常
      • 3)用户自定义异常
      • 4)程序调试
    • 五、File 文件操作
      • 1)创建和打开文件
      • 2)file对象
      • 3)with..open()
    • 六、os 模块
      • 1)常用 os 方法
      • 2)常用 os.path 方法
    • 七、日期与时间
      • 1)获取当前时间戳
      • 2)获取当前时间
      • 3)格式化时间
      • 4)时间戳和格式化时间相互转化

一、概述

上一篇文章:Python 基础语法介绍(一),已经介绍了一部分基础知识了,这里就继续介绍python基础知识。

在这里插入图片描述

二、函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段,函数能提高应用的模块性,和代码的重复利用率。

1)函数定义

定义函数规则如下:

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
  • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以冒号 : 起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。

在这里插入图片描述
Python 定义函数使用 def 关键字,一般格式如下:

def 函数名(参数列表):
    函数体

在定义函数名字的时候我们需要注意几点:

  • 关键字不能作为函数名字。

  • 函数名中不能存在空格。

  • 函数名的首字母必须是大小写字母或者下划线。

  • 函数名的其余字母可以使用字母、数字以及下划线。

  • 不同函数名大小写不同的时候为不同函数。

示例如下:

#!/usr/bin/python3

# 定义函数
def get_name():
    pass
def get_salary():
    pass
def add_money():
    pass

2)函数调用

当我们创建好函数之后,如果不调用的话,函数永远都不会执行。调用函数的时候,解释器会跳到函数体内,执行函数内的语句,当执行完毕之后回到调用的位置继续执行后续语句。

示例如下:

#!/usr/bin/python3

# 定义函数
def helloworld():
    print('调用函数')
    print('helloworld')
    print('人生苦短,我用Python')

# 调用函数
helloworld()
print('调用完毕')

3)函数传参

在调用函数的时候,主函数和调用函数之间总是离不开数据的传递,有了数据的传递,也就是参数的传递。参数的作用是用来传递数据给函数使用。

1、形式参数和实际参数

  • 形式参数为我们定义函数的时候再括号中定义的参数,我们在函数的内部会使用这个参数进行代码的编写;
  • 实际参数函数调用的时候传进来的参数,函数返回的结果是根据这个实际参数来代替形式参数。

2、关键字参数

为了提高程序的可读性,在函数调用的时候还可以使用关键字参数调用

示例如下:

>>> def volume(length,width,height):
...     volume = length * width * height
...     print('体积为:',volume)
...
>>> volume(length=20,width=30,height=3)
体积为: 1800

3、参数默认值

当我们定义一个函数的时候,可以给函数的参数定义一个初始值,这样在我们调用函数的时候如果没有给出实际参数,那么函数会使用默认参数

示例如下:

>>> def volume(length=100,width=100,height=10):
...     volume = length * width * height
...     print(volume)
...
>>> volume()#不给出实际参数的时候会使用默认参数100000
>>> volume(10,10,10)#给出实际参数会传递实际参数给出输出结果
1000

4、可变参数

在Python中函数的参数个数是可以变化的,也就是说参数的数量可以是不确定的,这种参数被称为可变参数。可变参数分为两种:

  • 一种是参数前加 *,这种方式的可变参数在传递的时候是以元组的形式传递。
  • 一种是参数前加**,这种方式的可变参数在传递的时候以字典的形式传递。

元组形式示例如下:

>>> def add_number(*number):
...     add_num = 0
...     for i in number:
...             add_num += i
...     print(add_num)
...
>>> add_number(1,2,3,4,5)
15

字典形式示例如下:

>>> def printinfo( arg1, **vardict ):
...    "打印任何传入的参数"
...    print ("输出: ")
...    print (arg1)
...    print (vardict)
...
>>>
>>> printinfo(1, a=2,b=3)
输出:
1
{'a': 2, 'b': 3}
>>>

4)函数返回值

在使用函数的过程中通常是调用函数,然后被调用的函数中的内容会依次被执行,但是我们有的时候需要的不只是执行的步骤,我们还需要获取到函数中的一些变量,因此我们在使用函数的时候还可以增添一个返回值来获取函数中的一些数据。

1、语法结构

Python中关于返回值需要使用return语句,它的语法结构为:

return data

示例如下:

def get_sum(a,b):
    sum = a + b
    return sum
get_sum(1,2)

2、多值返回

在返回多个值的时候原理和一个值的时候类似,我们需要注意的一点是当我们返回的是多个值的时候,多个值是被存储在元组当中的。

示例如下:

>>> def get_data():
...     a = 1
...     b = 2
...     c = 3
...     d = 4
...     return a,b,c,d
...
>>> print('返回值的类型:',type(get_data()))
返回值的类型: <class 'tuple'>
>>> print('返回值:',get_data())
返回值: (1, 2, 3, 4)
>>>

5)变量作用域

变量的作用域指的是一个变量能够有效的区域,因为我们在使用函数的时候,有的变量是在主程序中定义的,有的是在调用的函数中定义的,当我们的主程序使用函数中定义的变量时,就会出现异常。下面来介绍一下局部变量全局变量

1、局部变量

局部变量,顾名思义,就是作用在局部区域的变量,如果是在函数中定义的变量,那么就只在函数中起作用,如果在函数外部使用函数内部的变量,就会出现异常。

示例如下:

>>> def test():
...     data = '局部变量'
...     print('在函数内部输出data为:',data)
...
>>> test()
在函数内部输出data为: 局部变量
>>> print('在主程序中输出data:',data)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'data' is not defined
>>>

从上面执行结果可知,由于变量data是在函数内部定义的,我们在主程序中使用变量data则会出现访问的变量不存在的问题。

【结论】在函数内部定义的变量为局部变量,未作特别声明(global)的话是不可以在函数外使用的。

2、全局变量

全局变量我们也可以从字面意思中理解到它就是作用在全局的变量,有的同学可能自然而然的认为那么全局变量一定是定义在主程序中的变量了,其实全局变量也是可以作用在函数中的,在这里我们来介绍两种全局变量的使用方式:

【1】在主程序中定义全局变量
>>> data = '全局变量data'
>>> def test():
...     print('这是作用在函数中的全局变量:',data)
...
>>> test()
这是作用在函数中的全局变量: 全局变量data
>>> print('这是作用在函数外的全局变量:',data)
这是作用在函数外的全局变量: 全局变量data
>>>
【2】 使用global关键字在函数中声明全局变量

在函数内定义的变量也可以变成全局变量,这时候我们就要使用到global关键字。

首先我们先看一下当全局变量和局部变量的名字相同的时候会是一个怎么样的情况,看下面的例子:

>>> data = '这里是全局变量data'
>>> print(data)
这里是全局变量data
>>> def test():
...     data = '这里是局部变量data'
...     print(data)
...
>>> test()
这里是局部变量data
>>> print('再检查一下全局变量data:',data)
再检查一下全局变量data: 这里是全局变量data
>>>

使用global关键字示例如下:

>>> data = '这里是全局变量data'
>>> print(data)
这里是全局变量data
>>> def test():
...     global data
...     data = '这里是局部变量data'
...     print(data)
...
>>> test()
这里是局部变量data
>>> print('再检查一下全局变量data:',data)
再检查一下全局变量data: 这里是局部变量data
>>>

通过global关键字,在局部中声明告诉这个函数global 变量是一个全局变量,那么修改了之后,全局中的变量都做了修改,global关键字就是可以使一个变量变成全局变量

6)匿名函数(lambda)

想必大家都知道匿名是什么含义,匿名就是指没有名字,我们在写程序的过程中有时不需要给函数命名,这时候就可以使用匿名函数,我们在Python中使用lambda表达式来使用匿名函数。

1、匿名函数的定义

通过一个例子来介绍一下lambda函数的简单使用,变量m为我们输入的值,我们需要采用匿名函数来返回m的平方和,也就是输入2要返回值为4。

>>> m = int(input('请输入一个数字:'))#m为输入的值
请输入一个数字:6
>>> a = lambda x : x * x #使用变量a来构成一个表达式
>>> print('返回值为:',a(m))
返回值为: 36
>>>

通过下图再来看一下它的结构:
在这里插入图片描述

2、序列调用匿名方法

在序列中同样可以使用匿名函数,使用匿名函数可以帮助我们进行很快的数据筛选,看下面的例子:

>>> my_list = [1,4,6,9,12,23,25,28,36,38,41,56,63,77,88,99]
>>> print(list(filter(lambda x : x % 2 == 0,my_list)))
[4, 6, 12, 28, 36, 38, 56, 88]
>>>

7)常用内置函数

Python中常用的内置函数如下:

函数名说明
abs()返回绝对值
bin()返回二进制
bool()返回布尔值
chr()用一个范围在256内的整数作参数,返回一个对应的字符
cmp(x,y)用于比较,前者大于后者返回1,相等返回0,小于后者返回-1
dict()创建字典
eval()返回字符串表达式的值
file()创建一个 file 对象
filter()过滤函数
float()把整数和字符串转换成浮点数
format()格式化函数
getattr()返回一个对象属性值
globals()全局变量
hash()返回一个对象的哈希值
help()查看函数或者模块的功能
hex()将10进制整数转换成16进制
id()返回一个对象在内存中的地址
input()标准输入
isinstance()判断一个对象是否为已知的类型
int()把字符串或数字转换为整型
len()返回序列的长度
list()把其他数据类型转换为列表
map()映射函数
max()返回最大值
min()返回最小值
next()返回迭代对象的下一项
oct()整数转换八进制数
pow(x,y)返回x的y次方
print()输出
range()创建整数序列
reduce()聚合函数
reverse()逆序
round()对浮点数四舍五入
set()创建集合
sorted()排序
sum()求和

三、python 模块

Python中有很多功能强大的模块,这些模块有的存在于Python系统库中有的存在于第三方库中,这些模块会为我们提供各种各样的功能。

看下面的示意图:
在这里插入图片描述

1)导入模块

1、第一种方式:import 模块名

示例如下:

import random#从系统库中引入这个模块
test = random.randint(1,10)#使用random模块中的randint()方法
print('生成一个随机数:',test)

2、第二种方式:import 模块名 as 别名

import math as t
test = t.cos(2.5)
print(test)

3、第三种方式:from 模块名 import 函数名

from random import randint
test = randint(1,10)
print(test)

2)自定义模块和导入模块

引入的模块通常有三种类型:

  • 一种是系统库中存在的模块。
  • 一种是第三方模块。
  • 最后一种就是我们自己定义来的模块

1、自定义模块

模块名(文件名)为getcolor.py

def get_color(n):
    if n<13:
        return '梅花'
    elif n<26:
        return '方块'
    elif n<39:
        return '红桃'
    else:
        return '黑桃'

模块名(文件名)为getvalue.py

def get_value(n):
    if n==0 or n==13 or n==26 or n==39:
        return 'A'
    elif n==12 or n==25 or n==38 or n==51:
        return 'K'
    elif n==11 or n==24 or n==37 or n==50:
        return 'Q'
    elif n==10 or n==23 or n==36 or n==49:
        return 'J'
    else:
        return n%13

2、调用自定义模块

导入自己定义的模块,关键代码如下:

from getcolor import get_color
from getvalue import get_value

四、异常处理和程序调试

1)异常处理 try…except

一张图了解异常处理机制:
在这里插入图片描述
示例如下:

try:
    runoob()
except AssertionError as error:
    print(error)
else:
    try:
        with open('file.log') as file:
            read_data = file.read()
    except FileNotFoundError as fnf_error:
        print(fnf_error)
finally:
    print('这句话,无论异常是否发生都会执行。')

2)手动抛出异常

Python 使用 raise 语句抛出一个指定的异常。
raise语法格式如下:

raise [Exception [, args [, traceback]]]

在这里插入图片描述
示例如下:

>>> x = 10
>>> if x > 5:
...     raise Exception('x 不能大于 5。x 的值为: {}'.format(x))
...
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
Exception: x 不能大于 5。x 的值为: 10
>>>

3)用户自定义异常

>>> class MyError(Exception):
...   def __init__(self, value):
...       self.value = value
...   def __str__(self):
...       return repr(self.value)
...
>>> try:
...   raise MyError(2*2)
... except MyError as e:
...   print('My exception occurred, value:', e.value)
...
My exception occurred, value: 4
>>>

4)程序调试

使用assert断言对Ptyhon程序调试分析,在表达式条件为 false 的时候触发异常。。它的语法结构为:

assert expression[,describe]

在这里插入图片描述
示例如下:

>>> assert True     # 条件为 true 正常执行
>>> assert False    # 条件为 false 触发异常
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError
>>> assert 1==1    # 条件为 true 正常执行
>>> assert 1==2    # 条件为 false 触发异常
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError

>>> assert 1==2 # '1 不等于 2'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError: 1 不等于 2
>>>
>>> import sys
>>> assert ('linux' in sys.platform) #"该代码只能在 Linux 下执行,在window下执行会报如下错误"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError

五、File 文件操作

在Python中访问文件、访问目录、读取文件和写入文件的操作是非常常见的,Python的文件对象也被称为类似文件对象或者流。

1)创建和打开文件

创建或者打开文件的时候需要使用到open()函数,它的语法结构为:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

参数说明:

  • file: 必需,文件路径(相对或者绝对路径)。
  • mode: 可选,文件打开模式(常用)
  • buffering: 设置缓冲
  • encoding: 一般使用utf8
  • errors: 报错级别
  • newline: 区分换行符
  • closefd: 传入的file参数类型
  • opener: 设置自定义开启器,开启器的返回值必须是一个打开的文件描述符。

mode 常用参数如下:
在这里插入图片描述

2)file对象

  • file.write(str)——将字符串写入文件,返回的是写入的字符长度
  • file.read([size])——从文件读取指定的字节数,如果未给定或为负则读取所有。
  • file.readline([size])——读取整行,包括 “\n” 字符。
  • file.readlines([sizeint])——读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。
  • file.flush()——刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
  • file.close()——关闭文件。关闭后文件不能再进行读写操作。
  • file.writelines(sequence)——向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

示例如下:

file = open('test.txt','w')
file.write('第一次写入。')
print(file)
file = open('test.txt','a+')
file.write('第二次追加写入。')
print(file)

我们可以在写入之后需要文件关闭掉,以保证文件中的内容不被恶意插件修改,关闭的方式为:

file.close()

但是使用with可以省略file.close(),因为with会自动关闭文件。

3)with…open()

每次都写close()比较繁琐,Python引入with语句,这样能够确保最后文件一定被关闭,且不用手动再调用close方法。

示例如下:

>>> with open('files.txt','w+') as file:
...     file.write('hello world!!!')
...
14
>>> file.readlines()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: I/O operation on closed file.
>>>

六、os 模块

我们对文件的管理是通过文件对象的方式实现的,而文件是Python中os模块,我们在管理文件或目录的时候,就需要使用Python中的os模块,os模块中有非常多的方法来帮助我们处理文件及目录。

1)常用 os 方法

常用的os方法如下表格:
在这里插入图片描述
示例如下:

>>> import os
>>> os.name#返回nt为windows,posix为Linux、Unix或mac os。
>>> os.linesep#当前系统的换行符
'\r\n'
>>> os.sep#当前系统的分隔符
'\\'
>>> os.name
'nt'

2)常用 os.path 方法

os.path是一个针对路径的模块,模块内提供对文件、目录和路径管理的函数,常见的方法如下表格:
在这里插入图片描述
其中最常用的几种分别是abspath()exists(path)join(path,name)basename(path)dirname(path)isdir(path),我们来看个例子:

>>> import os
>>> print('当前目录:',os.getcwd())
当前目录: /root
>>> print('判断当前目录是否存在,存在的话返回True',os.path.exists(os.getcwd()))
判断当前目录是否存在,存在的话返回True True
>>>

七、日期与时间

Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能。

1)获取当前时间戳

示例如下:

>>> import time  # 引入time模块
>>>
>>> # 获取当前时间戳
... ticks = time.time()
>>> print ("当前时间戳为:", ticks)
当前时间戳为: 1675176378.2444868
>>>

2)获取当前时间

从返回浮点数的时间戳方式向时间元组转换,只要将浮点数传递给如localtime之类的函数。

>>> import time
>>>
>>> localtime = time.localtime(time.time())
>>> print ("本地时间为 :", localtime)
本地时间为 : time.struct_time(tm_year=2023, tm_mon=1, tm_mday=31, tm_hour=22, tm_min=47, tm_sec=16, tm_wday=1, tm_yday=31, tm_isdst=0)
>>>

3)格式化时间

>>> import time
>>>
>>> localtime = time.asctime( time.localtime(time.time()) )
>>> print ("本地时间为 :", localtime)
本地时间为 : Tue Jan 31 22:48:00 2023
>>> print ("本地时间为 :", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
本地时间为 : 2023-01-31 22:49:12
>>>

4)时间戳和格式化时间相互转化

时间戳转格式化时间

>>> import time
>>> timestamp = 1675175334 # 时间戳
>>> formattime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(timestamp))
>>> print(formattime )
2023-01-31 22:28:54
>>>

格式化时间转时间戳

>>> import time
>>> dt = "2023-01-31 22:28:54"
>>> timeArray = time.strptime(dt, "%Y-%m-%d %H:%M:%S")
>>> timestamp = time.mktime(timeArray)
>>> print(timestamp)
1675175334.0
>>>

python基础部分就先到这里了,非常简单,网络资料也很多,都差不多,这里也只是针对常用的知识点整理了一下。讲完了基础部分,接下来就进入高级编程了,例如:面向对象、网络编程等等,请小伙伴耐心,也可关注我的公众号【大数据与云原生技术分享】深入交流~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/190640.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

金融风控12

社交网络分析与金融反欺诈 设备指纹 一般是基于某些设备信息&#xff0c;通过一些设备指纹算法将这些信息组合&#xff0c;通过特定hsah算法得到一个ID值&#xff0c;作为该设备唯一标识符 常见元素有&#xff1a; - sim卡信息 - wifi信息 - 硬盘信息 - 内存信息 - 屏幕…

【Qt】6.QTableWidget控件、其他控件、自定义控件封装、鼠标事件

目录 QTableWidget控件 代码 widget.cpp 结果 其他控件 stackWidget栈控件 下拉框 代码 widget.cpp 结果 自定义控件封装 代码 smallwidget.h smallwidget.cpp widget.cpp 结果 鼠标事件 代码 mylabel.h mylabel.cpp 结果 QTableWidget控件 设置列数setC…

oAuth2的入门

目录一、OAuth2流程演示示例第一步第二步二、流程2.1 资源所有者2.2 客户2.3 客户2.4 认证服务器2.5 客户2.6 资源服务器三、测试一、OAuth2流程演示示例 第一步 先到gitee下载oAuth2官方提供的代码&#xff0c;然后导入项目 https://gitee.com/lisenaq/oauth2-example.git第…

SpringMVC(十四):SpringMVC异常处理

文章目录 SpringMVC异常处理 一、异常简介 二、异常处理具体实现

Charles 的简单使用

1.下载并安装charles官方下载地址&#xff1a;https://www.charlesproxy.com/download/当前最新版本是4.6.3 选择合适的安装包进行下载&#xff08;windows.msi、macos.dmg、linux.tar.gz&#xff09;例windows.msi&#xff1a;执行msi文件&#xff0c;选择合适的下载地址&…

【机器学习】聚类算法(理论)

聚类算法&#xff08;理论&#xff09; 目录一、概论1、聚类算法的分类2、欧氏空间的引入二、K-Means算法1、算法思路2、算法总结三、DBSCAN算法1、相关概念2、算法思路3、算法总结四、实战部分...一、概论 聚类分析&#xff0c;即聚类&#xff08;Clustering&#xff09;&…

js继承的6种方式

// 1 原型链继承function Per() {this.name "key";}Per.prototype new Person(); // 主要var per1 new Per();console.log(per1.age);// instanceof 判断元素是否在其他元素的原型链上// per1继承了Person的属性&#xff0c;返回trueconsole.log(Per1 instanceof …

java常用类:BigInteger类和BigDecimal类

java常用类型: Ineteger等包装类 String类&#xff0c;StringBuffer类和StringBuilder类 Math类及常用方法 System类及常用方法 Arrays类及常用方法 BigInteger类和BigDecimal类及常用方法 日期类Date类,Calender类和LocalDateTime类 文章目录引言BigInteger (大整数)常用方法B…

二分算法学习

&#x1f33c; 扎着马尾的姑娘&#xff0c;笑容温柔很善良自在的少年 - 要不要买菜 - 单曲 - 网易云音乐 前言 本来打算做蓝桥杯2022&#xff23;&#xff0b;&#xff0b;A组省赛F题青蛙过河的,看到标签显示"二分",第一时间竟然想不到二分是什么,所以来学习下 目录…

传闻将与马云合作,涨了7倍的正大企业国际,还能跟风吗?

1月30日周一&#xff0c;港股正大企业国际逆势大涨68.35%&#xff0c;1月31日正大企业国际继续飙升&#xff0c;最高点涨超275%&#xff0c;收盘时涨幅达251.88%&#xff0c;成为2023年第一只翻倍的股票。今日早盘继续近40个点&#xff0c;还在持续发酵中。 消息面上&#xff…

Python+Go实践(电商架构一)

文章目录简介架构分析接口管理peeweeCURDGin获取请求参数protobuf验证表单中间件静态文件优雅退出小结简介 电商系统&#xff1a;后台管理前端商城 架构分析 传统的单体架构&#xff0c;以Django为例&#xff1b;之前写过flask开发微视频网站就是这样的架构 痛点分析及演进 …

Oracle数据库安装配置和卸载

Oracle数据库是一种网络上的数据库, 它在网络上支持多用户, 支持服务器/客户机等部署(或配置) 服务器与客户机是软件概念, 它们与计算机硬件不存在一一对应的关系. 即: 同一台计算机既可以充当服务器又可以充当客户机, 或者, 一台计算机只充当服务器或只充当充当客户机. Orac…

JAVA 老掉牙的面试问题 线程交替打印问题,分析实操一下

前言 新的一年了&#xff0c;首先是祝大家新年新气象&#xff0c;工作顺利&#xff0c;生活美满 。 万物复苏的一年&#xff0c; 大家都蠢蠢欲动&#xff01; 金三银四快来了&#xff0c; 机会多不多&#xff1f; ‘’满大街机会‘’ 好了不啰嗦&#xff0c;最近有比较多的小伙…

开关电源-TL431与光耦组成的电压反馈电路-TL431工作过程分析

开关电源&#xff1a;TL431与光耦组成的电压反馈电路 #开关电源#开关电源最基本的要求是输入电压变化时&#xff0c;输出电压保持恒定&#xff0c;而与此相关的测试如电压调整率、负载调整率等也是衡量开关电源性能的重要指标&#xff0c;实现输出电压恒定的方式是反馈&#x…

【Catalyst 9000上EEM的部署方法和示例,你看明白了吗?】

新的一年 新的征程 新的课程开班 等你来学&#xff01; EEM&#xff08;Embedded Event Manager&#xff09;作为一个自动化的脚本部署在设备上&#xff0c;可以根据指定的trigger来自动完成提前布置的任务&#xff0c;如信息的收集或特定的操作。一个完整的EEM需要包含Na…

Python学习-----起步2(变量与转义符)

目录 前言 Python变量/常量使用规则 基本数据变量类型 整形&#xff08;int&#xff09; 浮点型&#xff08;float&#xff09; 字符串类型&#xff08;str&#xff09; 布尔类型&#xff08;bool&#xff09; 转义符 习题 前言 在我们学习C语言时&#xff0c;我们学了很…

对象之间的拷贝

这里写目录标题Lambda 的 builderidea 自动生成插件 GenerateAllSetterMapStructDozer在开发的时候经常会有业务代码之间有很多的 JavaBean 之间的相互转化&#xff0c;比如 PO/DTO/VO/QueryParam 之间的转换问题&#xff0c;本文总结一下各种转换方法Lambda 的 builder 使用构…

有幸得到Alibaba内部Gradle实战笔记,趁机狂补

虽然一直在接触 Gradle&#xff0c;但对 Gradle 始终都有一些陌生感&#xff0c;表现在日常的开发中就是不敢随便改 build.gradle 文件&#xff0c;一旦 sync 出错&#xff0c;只会复制错误找谷歌&#xff0c;可是解决方案也不一定能够完美解决自己的问题。还有就是不熟悉 Grad…

黑客为什么都有一台笔记本电脑?

用一位程序员的话俩说&#xff1a;虽然我不是黑客&#xff0c;但是我也喜欢弄一些编程&#xff0c;对我而言&#xff0c;电脑就是我的工具&#xff0c;我的系统里面肯定有许多我自己写的程序&#xff0c;在我做任何操作的时候&#xff0c;我肯定使用我熟悉的软件&#xff0c;这…

创建者模式—工厂模式

目录 1.工厂模式 1.1概述 1.2简单工厂模式 1.2.1结构 1.2.2实现 1.2.3优缺点 1.2.4静态工厂 1.3工厂方法模式 1.3.1概念 1.3.2结构 1.3.3实现 1.3.4优缺点 1.4抽象工厂模式 1.4.1概念 1.4.2结构 1.4.3实现 1.4.4优缺点 1.工厂模式 1.1概述 需求&#xff1a;设…