欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python Day4

程序员文章站 2022-07-14 17:41:39
...

函数

  1. 关键字和参数
    函数声明时使用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)

  1. 命名空间, 作用域, 本地函数
    函数有两种连接的方式:全局, 本地。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
  1. 返回多个值
    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)]