#!/usr/bin/env python
# -*- coding:utf-8 -*-
#python3 代码执行过程,默认字符串是unicode,unicode----->encode------bytes(字节码),所以不会乱码,bytes---->decode----->unicode
#python2 代码执行过程,默认字符串就是bytes,可以指定u"字符串"为Unicode不会出现乱码,而bytes可以decode为指定的字符编码,不指定默认为python解释器的编码


#for的补充
# with open('newproducts','r',encoding='utf-8') as f,open('test2.txt','w+',encoding='utf-8') as g:
#     g.write(f.read())
#     f.seek(0)
#     for i in f.readlines():
#         print(i)
#     else: #(判断for语句执行是否中断,如果中间有break,else就不在执行)
#         print("================>successful")

# h = 1
# while h <= 20:
#     print(h)
#     h += 1
# else:
#     print("==============> successful")

#文件操作
#r+ 读写 文件不存在报错
#w+ 写读  文件不存则创建,存在则清除文件内容,写入新的内容
#a+ 追加

#文件读操作
# f = open("newproducts",'r',encoding='utf-8')
# print(f.read()) #一次读取文件中所有的行
# # print(f.readline(),end="") #一次输出文件中的一行,end取消print自带的换行符(\n)
# # print(f.readlines()) #一次输出文件中的内容,每行作为列表的元素
# # print(f.readable()) #判断文件打开的模式是否是可读
# print("=========================================")
# f.seek(0) #移动光标到文件的开头
# print(f.readlines())
# f.close() #关闭文件的句柄

#文件w写操作,文件存在则清除文件内容,文件不存在则创建文件
# f = open("productions",'w',encoding='utf-8')
# f.write('1111\n')
# f.write('33331')
# f.seek(0)
# f.write('2222\n')
# # f.writelines(["花生米  , 4.88\n","羊肉片  , 12.9\n"]) #文件中写入,列表只能是可以迭代的对象
# f.close()

#seek()将鼠标光标移动到开始文件开始位置
# f = open("productions",'w',encoding='utf-8')
# f.write("乐大妈风干肠\n")
# f.write('西红柿\n')
# f.seek(0) #seek中的数字代表字节,一个汉字utf-8 用3个字节bytes表示
# f.write("海南木瓜") #此处加上\n换行符会报编码错误,与第一行内容长度相同
# f.close()

#文件的修改,实质只是将原来文件的内容读到内存中,在内存中修改,然后覆盖原来的文件
# import os
# f = open("productions",'r',encoding='utf-8')
# g = open("test.txt",'w',encoding='utf-8')
# for i in f.readlines():
#     if i.startswith("海南木瓜"):
#         i ="苹果\t 7.8\n"
#     g.write(i)
# f.close()
# g.close()
#
# os.remove('productions')
# os.rename('test.txt',"productions")

#文件实时刷新日志
# import time
# with open('access.log','r',encoding='utf-8') as sf:
#     sf.seek(0,2) #将光标移到文件最后包含换行符
#     while True:
#         sends =  sf.readline().strip()
#         if sends:
#             print(sends)
#         time.sleep(0.5)

#以字节码的形式打开文件,需要以指定字符编码解码
# with open('access.log','rb') as sf:
#     print(sf.read().decode('utf-8')) #read中的数字指的是字符数,seek中的数字都是指字节码

#seek是以字节码的形式移动光标
# with open('newproducts','r',encoding='utf-8') as f,open('productions','w+',encoding='utf-8') as g:
#     g.write(f.read())
#     print(g.tell())
#     g.seek(0,2)
#     print(g.tell())
#     g.seek(0)
#     for i in g.readlines():
#         print(i)

#seek的2中模式seek(0,2),seek(0,1)
# with open('newtest','wb+') as f:
#     f.write("哈哈".encode('utf-8'))
#     print(f.tell())
#     # f.seek(1)
#     f.seek(2)
#     f.seek(1,1)
#     # f.seek(6)
#     print(f.read(3).decode('utf-8'))


#对二进制文件进行读写操作,把图片用二进制的方式读出来,然后复制出新的图片
# with open('timg.jpg','rb') as f,open('new.jpg','wb') as g:
#     g.write(f.read())


#三元表达式,三目运算(if条件满足输出左边的值,不成立输出else后面的值)
# b = "a"  if 2 > 1 else "c"
# print(b)

#函数
# def andy():
#     print("hello world")
#
# andy()

# def my_max(x,y):
#     mx = x if x > y else y
#     return mx
#
# print(my_max(3,4))

# def gev():
#     print("this is a test")
#     return 1,2,3,[4,5]
# a,b,c,d = gev()
# print(a,b)
#函数重点
#函数分为内置函数和自定义函数
#1、内置函数(sum,max)
# print(sum((1,2)))
# print(sum([1,2]))
# print(max(2,4))
# print(min(2,1))

#2、自定义函数
# def ziji(形参1,形参1):
#     '''函数说明'''
#     函数体
#     retrun 返回值


#定义函数的三种形式(定义函数的函数名不能以test开头)
#无参函数,函数的功能只是进行一些操作,无参函数都有返回值
# def hello():
#     print('hello world')
#
# hello()

#有参函数,函数的功能依赖于外部传入的参数,通常是有返回值
# def adds(x,y):
#     z = x + y
#     return z
#
# print(adds(1,2))

#对函数返回值,返回值可以是任意python数据类型,函数名字不能以test关键字开头
# def metest():
#     return 1,2,[3,4],{'a':5,'b':6}
# # a,b,c,d = metest()
# # print(a,b,c[0],d["a"])
# a,*_,d = metest() #*_代表多个元素
# print(a,d)

#函数调用
#根据有参函数和无参函数分为2中调用方式
#1.定义无参函数,调用时无需传参
#2.定义有参函数,调用时必须传参

#按照函数的调用形式和出现位置分为3种
# def foo():
#     print("testone")
#
# foo() #函数的语句形式

# def foo2(x):
#     return x
# print(foo2(2)*2) #函数的表达式形式

# def foo3(x,y):
#     z = max(x,y)
#     return z
#
# print(foo3(foo3(1,2),4)) #把函数的调用当成另一个函数的参数


###函数的参数(位置参数、关键字参数、默认参数、可变长参数、命名关键字参数)
#1.位置参数,位置参数的形参的个数必须和形参的个数一致,位置实参和位置形参一一对应
# def posti(x,y):
#     print(x,y)
# posti(1,2)

#2.关键字参数key=value
# def guaj(x,y,z):
#     print(x,y,z)
# # guaj(x=1,y=2,3) #错误,关键字实参不能必须放在位置参数后面
# # guaj(1,2,y=3) #错误,形参只能赋值一次
# guaj(1,2,z=4)

#3.默认参数
# def morec(z=3,x,y): #错误,默认形参必须跟在位置参数后面,默认形参通常定义为不可变类型(一个系统中都是男性,就可以定义为默认形参,不可变)
# f = 100
# def morec(x,y,z=f):
#     print(x,y,z)
# f = 1000
# morec(1,2) #输出结果1 2 100,默认参数在函数定义阶段就已经赋值了,而且只能在定义阶段赋值一次

#4.可变长参数,*args表示把溢出的元素组成一个元组
# def chalens(x,y,*args):
#     print(x,y,args)
# chalens(1,2,3,4,5,6)

# def chalen(x,y,*args):
#     print(x,y,args)
#
# chalen(1,2,3)
# chalen(*(1,2,3)) #----->*相当于拆分元组,把元祖当成位置参数传递给函数形参

#5.**kwargs,**会把溢出的实参,以字典的形式赋值给字典kwargs

# def kwlens(x,y,**kwargs):
#     print(x,y,kwargs)
#
# # kwlens(1,2,a=3,b=5)
# kwlens(1,2,**{"a":3,"b":4})  #--->**拆分为字典,把字典当成关键字参数传递给函数的形参

#命名关键字参数,*后定义的
# def foo(name,age,*,sex="male",height):
#     print(name)
#     print(age)
#     print(height)
#
# foo('andy',18,height=190)

 

posted on 2017-05-19 15:10  vspoti  阅读(80)  评论(0)    收藏  举报