一、概述
上一篇文章: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('第2次追加写入。')
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根底部分就先到这儿了,十分简略,网络资料也许多,都差不多,这儿也只是针对常用的常识点整理了一下。讲完了根底部分,接下来就进入高档编程了,例如:面向目标、网络编程等等,请小伙伴耐性,也可关注我的大众号【大数据与云原生技能共享】深入沟通~