一、文件操作
f
=
open
(
"file.txt"
,
‘r‘
)
print
(
len
(f.read()))
#文件总长度
print
(f.tell())
#读完文件,文件指针位置
f.seek(
0
,
0
)
#偏移回文件头
print
(f.readline())
#打印出文件中一行(第一行)
print
f.tell()
#显示文件指针现在的位置
f.seek(
2
,
1
)
#从当前文件指针(向后)偏移2个字节
print
(f.readline())
#再打印一行(应该少2个字节)
print
(f.tell())
#显示 现在 的指针位置
f.seek(
-
7
,
1
)
#从当前位置向前偏移7个字节
print
(f.readline())
#打印下一行
print
(f.tell())
#显示 现在 的指针位置
f.seek(
-
9
,
2
)
#从尾部向前偏移9个字符
print
(f.tell())
#显示 现在 的指针位置
print
(f.readline())
#打印出内容
f.seek(
0
)
#==>默认是0 等等seek(0,0)
f.seek(
80
)
#等同上面的seek(-9,2) 从尾部向前取
二、函数
形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量
实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值
def stu_register(name, age, country, course):
print("----注册学生信息------")
print("姓名:", name)
print("age:", age)
print("国籍:", country)
print("课程:", course)
stu_register("王山炮", 22, "CN", "python_devops")
stu_register("张叫春", 21, "CN", "linux")
stu_register("刘老根", 25, "CN", "linux")
非固定参数
若你的函数在定义时不确定用户想传入多少个参数,就可以使用非固定参数
def stu_register(name, age, *args): # *args 会把多传入的参数变成一个元组形式 print(name, age, args)
stu_register("Alex", 22)
stu_register("Jack", 32, "CN", "Python”)
还可以有一个**kwargs
def stu_register(name, age, *args, **kwargs): # *kwargs 会把多传入的参数变成一个dict形式 print(name, age, args, kwargs)
stu_register("Alex", 22)
stu_register("Jack", 32, "CN", "Python", sex="Male", province="ShanDong")
1、普通调用
与其他语言中函数调用一样,Python中在调用函数时,需要给定和形参相同个数的实参并按顺序一一对应。
def
fun(name, age, gender)
XXXX
调用:fun(
‘Jack‘
,
20
,
‘man‘
)
2、使用关键字参数调用函数
函数也可以通过keyword=value 形式的关键字参数来调用,因为我们明确指出了对应关系,所以参数的顺序也就无关紧要了。
def
fun(name, age, gender):
XXXXX
调用:fun(gender
=
‘man‘
, name
=
‘Jack‘
, age
=
20
)
3、调用具有默认实参的函数
Python中的函数也可以给一个或多个参数指定默认值,这样在调用时可以选择性地省略该参数:
def
fun(a, b, c
=100
):
print
(a,
b,
c)
fun(
1
,
2
)
fun(
1
,
2
,
3
)
注意:通常情况下默认值只被计算一次,但如果默认值是一个可变对象时会有所不同, 如列表, 字典, 或大多类的对象时。例如,下面的函数在随后的调用中会累积参数值:
def
fun(a, L
=
[]):
L.append(a)
print
(L)
fun(
1
)
# 输出[1]
fun(
2
)
# 输出[1, 2]
fun(
3
)
# 输出[1, 2, 3]
4、调用可变参数函数
通过在形参前加一个星号(*)或两个星号(**)来指定函数可以接收任意数量的实参。
def
fun(
*
args):
print
(
type
(args))
print
(args)
fun(
1
,
2
,
3
,
4
,
5
,
6
)
# 输出:
# <class ‘tuple‘>
# (1, 2, 3, 4, 5, 6)
def
fun(
*
*
args):
print
(
type
(args))
print
(args)
fun(a
=
1
,b
=
2
,c
=
3
,d
=
4
,e
=
5
)
# 输出:
# <class ‘dict‘>
# {‘d‘: 4, ‘e‘: 5, ‘b‘: 2, ‘c‘: 3, ‘a‘: 1}
从两个示例的输出可以看出:当参数形如*args时,传递给函数的任意个实参会按位置被包装进一个元组(tuple);当参数形如**args时,传递给函数的任意个key=value实参会被包装进一个字典(dict)。
5、通过解包参数调用函数
上一点说到传递任意数量的实参时会将它们打包进一个元组或字典,当然有打包也就有解包(unpacking)。通过 单星号和双星号对List、Tuple和Dictionary进行解包:
def
fun(a
=
1
, b
=
2
, c
=
3
):
print
(a
+
b
+
c)
fun()
# 正常调用
list1
=
[
11
,
22
,
33
]
dict1
=
{
‘a‘
:
40
,
‘b‘
:
50
,
‘c‘
:
60
}
fun(
*
list1)
# 解包列表
fun(
*
*
dict1)
# 解包字典
# 输出:
# 6
# 66
# 150
三、.返回值
要想获取函数的执行结果,就可以用return语句把结果返回
注意:
- 函数在执行过程中只要遇到return语句,就会停止执行并返回结果
- 如果未在函数中指定return,那这个函数的返回值为None
四、.内置函数