函数
基本形式:def greet():
print("hello")
greet()
#输出结果:hello
传递参数:
def greet(name):
print("hello " + name)
greet("xiao ming")
#输出结果:hello xiao ming
形参与实参:
形参是函数参数列表中声明的参数
实参是实际传递的参数
位置实参
按位置传递参数:
def greet(name, msg):
print(name + " says " + msg)
greet("xiao ming", "Hello Python")
#输出结果:xiao ming says Hello Python
关键字实参:
def greet(name, msg):
print(name + " says " + msg)
greet(name="xiao ming", msg="Hello Python")
#输出结果:xiao ming says Hello Python
默认值
默认值必须放在参数列表中的最后
def greet(msg, name="xiao ming"):
print(name + " says " + msg)
greet("Hello Python")
返回值
def greetWords(msg, name="xiao ming"):
return name + " says " + msg
print(greetWords("Hello"))
#输出结果:xiao ming says Hello
返回字典
def debugInfo():
return {'debug_level':'info', 'msg':'file not found'}
print(debugInfo())
#输出结果:{'debug_level': 'info', 'msg': 'file not found'}
传递列表
在函数中可以修改列表的值:
def modify(names):
names[0] = 'xiao ming'
names = ['Lily', 'Mick']
modify(names)
print(names)
#输出结果:['xiao ming', 'Mick']
禁止修改列表:
def modify(names):
names[0] = 'xiao ming'
names = ['Lily', 'Mick']
modify(names[:])
print(names)
#输出结果:['Lily', 'Mick']
变参函数
def output(*names):
print(names)
for name in names:
print(name)
output('Lily', 'Mick')
使用任意数量的实参
def print_debuginfo(**debug_info):
for key,value in debug_info.items():
print(key + ":" + value)
print_debuginfo(level='debug', msg='file not found')
#输出结果:
level:debug
msg:file not found
将函数存储在模块中
导入整个模块
文件名即为模块
import module_name
使用时用点访问函数名字
module_name.function_name
导入特定函数
单个函数
from module_name import function_name
多个函数用逗号隔开
from module_name import function_0, function_1, function_2
as给函数指定别名
from module_name import function_name as other_function_name
导入模块中所有函数
from module import *
直接使用函数,无需指定模块名字
类
class Dog():# 构造方法
def __init__(self, name, age):
self.name = name
self.age = age
def sit(self):
print(self.name.title() + " is now sitting.")
def roll_over(self):
print(self.name.title() + " rolled over!")
创建实例
my_dog = Dog('willie', 6)
访问属性
print("My dog's name is " + my_dog.name.title() + ".")
调用方法
my_dog.sit()
继承
class FlyDog(Dog): #括号中指定基类
def __init__(self, name, age, mile):
super().__init__(name, age) # 用super()指定基类
self.mile = mile
# 重写父类方法
def sit(self):
print(self.name.title() + " is now sitting in the air")
my_dog = FlyDog('willie', 6, 10)
my_dog.sit()
导入类
导入单个类
创建一个包含Car类的模块,命名为car.py,另一个包导入它:
from car import Car
导入多个类
from module import Class1 Class2
导入整个模块
import car
使用时需要指定car
car.ClassName
导入所有类
from module_name import *
使用时无需指定模块名
文件和异常
读文件读取整个文件:
with open('hello.py') as file_object:
contents = file_object.read()
print(contents)
关键字with在不需要访问文件后将其关闭。
逐行读取
with open('hello.py') as file_object:
for line in file_object:
print(line)
读取到列表
with open('hello.py') as file_object:
lines = file_object.readlines()
for line in lines:
print(line)
写文件
with open('hello.txt', 'w') as file_object:
file_object.write('Hello Python')
附加到文件
with open('hello.txt', 'a') as file_object:
file_object.write('Hello Go')
异常
try:
print(1/0)
except ZeroDivisionError:
print("You can't divide by zero!")
使用else
try:
print(3/2)
except ZeroDivisionError:
print("You can't divide by zero!")
else:
print('ok')
使用pass
try:
print(3/2)
except ZeroDivisionError:
pass
else:
print('ok')
处理json
import jsondata = {'debug_level': 'info', 'msg':'file not found'}
file_name = 'test.jon'
with open(file_name, 'w') as f_obj:
json.dump(data, f_obj)
with open(file_name) as f_obj:
data = json.load(f_obj)
print(data)