Python Day4
函数
- 关键字和参数
函数声明时使用def 关键字,返回时用return 关键字:
if my_fuction(x, y, z = 1,5):
if z > 1:
return z * (x + y)
else:
return z / (x + y)
可以多条返回值,如果达到函数尾部仍没有遇到return,就会自动返回None.
每个函数都可以有位置参数和关键字参数,关键字参数最常用于指定默认值或可选参数。 上面的函数中,x 和 y 是位置函数, z是关键字参数。函数可以通过以下任意方式进行调用。
my_function(5, 6, z = 0.7)
my_function(3.14, 7 , 3.7)
my_function(10, 20)
关键字参数必须跟在位置参数后(如果有的话)。用参数名指定的时候,也可以不用记住函数传参的顺序。
my_function(x = 5, y = 6, z = 7)
my_function(y = 6, x = 5, z = 7)
- 命名空间, 作用域, 本地函数
函数有两种连接的方式:全局, 本地。python中更贴切地描述变量作用域地名称是命名空间。在函数内部, 任意变量都是默认分配到本地命名空间的。本地命名空间是在函数被调用时生成的,函数执行结束后,本地命名空间就会被销毁。例如,
def func():
a = []
for i in range(5):
a.append(i)
当调用func()时,空的列表a会被创建,函数退出的时候,a就会被销毁。e.g.:
>>> def func():
b = []
for i in range(5):
b.append(i)
>>> b
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
b
NameError: name 'b' is not defined
>>> b = []
>>> def func():
for i in range(5):
b.append(i)
>>> b
[]
在函数外部给变量赋值也可以,但是这些变量必须使用global关键字声明为全局变量:
>>> c = None
>>> def bind_c_variable():
global c
c = []
>>> bind_c_variable()
>>> c
[]
#comparison:
>>> c = None
>>> def bind_c_variable():
c = []
>>> bind_c_variable()
>>> print(c)
None
- 返回多个值
python使用简单语法就可以从函数中返回多个值
>>> def f():
a = 5
b = 6
c = 7
return a, b, c
>>> a, b, c = f()
>>> a, b, c
(5, 6, 7)
>>> return_value = f()
>>> return_value
(5, 6, 7)
另一种更有吸引力的表达形式还有:
>>> def f():
a = 5
b = 6
c = 7
return {'a' : a, 'b' :b, 'c' : c}
>>> f()
{'a': 5, 'b': 6, 'c': 7}
文件与操作系统
打开文件进行读取或写入,需要使用内建函数open和绝对、相对路径:
>>> path = 'E:\\python\\text_15.txt'
>>> lines = [x.rstrip() for x in open(path)]
>>> lines
['1234234t', '1234', '234', 'nihao']
对于可读文件,最常用方法可以用read, seek, tell。
read返回文件中一定量的字符,构成字符的内容由文件的编码决定,或者在二进制模式下打开文件读取简单的原生字节。
read可以通过读取的字节数来推进文件句柄的位置,tell的方法可以给出句柄当前的位置。seek可以将句柄位置改变到文件中特定的字节。
sys模块可以检查文件的默认编码。
>>> f = open(path, 'rb')
>>> f.read()
b'1234234t\r\n1234\r\n234\r\nnihao'
>>> f = open(path)
>>> f.read(2)
'12'
>>> f.read(10)
'34234t\n123'
>>> f.read(2)
'4\n'
>>> f.tell()
16
>>> import sys
>>> sys.getdefaultencoding()
'utf-8'
牢记要关闭文件
>>> f.close()
>>> f.read(1)
Traceback (most recent call last):
File "<pyshell#52>", line 1, in <module>
f.read(1)
ValueError: I/O operation on closed file.
>>> f.closed
True
OS 模块
Python os模块包含普遍的操作系统功能。如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的。
os.name
输出字符串指示正在使用的平台。如果是window 则用’nt’表示,对于Linux/Unix用户,它是’posix’。
os.getcwd()
函数得到当前工作目录,即当前Python脚本工作的目录路径。
os.listdir()
返回指定目录下的所有文件和目录名。
>>> os.name
'nt'
>>> os.getcwd()
'C:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python37'
>>> os.listdir()
['DLLs', 'Doc', 'include', 'Lib', 'libs', 'LICENSE.txt', 'NEWS.txt', 'python.exe', 'python3.dll', 'python37.dll', 'pythonw.exe', 'Scripts', 'tcl', 'Tools', 'vcruntime140.dll']
>>> os.listdir('E:\MscBA\Semester 2\Analytics in practice\Airbnb data\Berlin\seperate csv')
['host_Berlin.xlsx', 'Infor_Berllin.xlsx', 'location_Berlin.xlsx', 'review_Berlin.xlsx']
os.path 模块主要用于获取文件的属性。
>>> import os
>>> import time
>>> file = 'E:\MscBA\Semester 2\Analytics in practice\Airbnb data\Berlin\seperate csv\host_Berlin.xlsx'
>>>
print( os.path.getatime(file) ) # 输出最近访问时间
1561902594.8116982
>>> print( os.path.getctime(file) ) # 输出文件创建时间
1523707083.842305
>>> print( time.gmtime(os.path.getmtime(file)) ) # 以struct_time形式输出最近修改时间
time.struct_time(tm_year=2018, tm_mon=4, tm_mday=14, tm_hour=12, tm_min=40, tm_sec=56, tm_wday=5, tm_yday=104, tm_isdst=0)
>>> print( os.path.getsize(file) ) # 输出文件大小(字节为单位
1988064
>>> print( os.path.abspath(file) ) # 输出绝对路径
E:\MscBA\Semester 2\Analytics in practice\Airbnb data\Berlin\seperate csv\host_Berlin.xlsx
>>> print( os.path.normpath(file) ) # 规范path字符串形式
E:\MscBA\Semester 2\Analytics in practice\Airbnb data\Berlin\seperate csv\host_Berlin.xlsx
datatime 模块
python标准库包含了日期和时间数据的类型,也包括日历相关的功能。
>>> from datetime import datetime
>>> now = datetime.now()
>>> now
datetime.datetime(2019, 6, 30, 21, 31, 8, 411817)
>>> now.year
2019
>>> now.month
6
>>> now.day
30
datetime既存储了日期,也存储了微秒的时间,timedelta表示两个datetime对象的时间差:
>>> delta = datetime(2011,1,7) - datetime(2008, 6, 24, 8, 15)
>>> delta
datetime.timedelta(days=926, seconds=56700)
>>> delta.days
926
>>> delta.seconds
56700
也可以为一个datetime加上或减去一个timedelta或其整数倍来产生一个新的datetime:
>>> from datetime import timedelta
>>> start = datetime(2011, 1, 7)
>>> start + timedelta(12)
datetime.datetime(2011, 1, 19, 0, 0)
>>> start - 2* timedelta(12)
datetime.datetime(2010, 12, 14, 0, 0)
可以用str的方法或传递一个指定的格式给strftime的方法,来对datetime对象和pandas的timestamp对象进行格式化:
>>> stamp = datetime(2011,1,3)
>>> str(stamp)
'2011-01-03 00:00:00'
>>> stamp.strftime('%Y--%m--%d')
'2011--01--03'
可以使用datetime.srtptime和格式代码,将字符串转换日期:
>>> value = '2011-01-03'
>>> datetime.strptime(value, '%Y-%m-%d')
datetime.datetime(2011, 1, 3, 0, 0)
>>> datestrs = ['7/6/2011','8/6/2011']
>>> [datetime.strptime(x, '%m/%d/%Y') for x in datestrs]
[datetime.datetime(2011, 7, 6, 0, 0), datetime.datetime(2011, 8, 6, 0, 0)]
上一篇: day4 python中的容器
下一篇: LeetCode9. 回文数