一、文件操作
= 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 = [112233
     dict1 = {'a':40'b':50'c':60
     fun(*list1)  # 解包列表 
     fun(**dict1) # 解包字典 
  
#输出:
6
66
150
 
 
三、.返回值
要想获取函数的执行结果,就可以用return语句把结果返回
 
注意:
 
  1. 函数在执行过程中只要遇到return语句,就会停止执行并返回结果
  2. 如果未在函数中指定return,那这个函数的返回值为None

四、.内置函数