python 中的函数概念
# 函数,代码复用
def Add(x, y):
return x + y
print (Add(1, 2))
def Add(x, y, z):
return x + y + z
print (Add(1, 2))
当我们试图将一个整型和字符串类型进行相加
def Add(x, y):
return x + y
print (Add(1, 'hello'))
在C/C++中如果两个变量不能相加,这是一个编译时错误
但是在python中,这是一个运行时错误,这也是因为python是解释型语言
当我们试图进行像C++中一样定义函数名相同而参数不同的两个函数时
def Add(x, y):
return x + y
def Add(x, y, z):
return x + y + z
print (Add(1, 2, 4))
print (Add(1, 2))
会提示我们说少了一个参数
其实在python 中的面向对象思想中,本着一切皆对象的原则,函数也是一个对象,称为可调用对象
例如上面我们定义了两个函数,其实是根据动态类型的特性,第二个对象替代了第一个对象,所以第一个函数也就不存在了。
# 但是python支持默认参数
def func(debug=True):
if debug:
print ("in debug mode")
print ("done")
func()
func(True)
# python中函数的返回值可以为多个
def GetPoint(x, y):
return x, y
x, y = GetPoint(1, 3)
print (x)
print (y)
python中的文件操作
本着一切皆对象的思想
这里open()函数返回的并不是一个文件描述符,而是一个文件对象,很明显这个我文件对象中也包含一个文件描述符
# 统计一个文本中,每一行的单词的次数,文本中每一行只有一个单词
handle = open("./hello.txt", 'w')
handle.write("aaa\n")
handle.write("aaa\n")
handle.write("bbbb\n")
handle.write("bbbb\n")
handle.write("cccccc\n")
handle.write("cccccc\n")
handle.write("cccccc\n")
handle.close()
handle = open("./hello.txt", 'r')
words = {} # 定义一个字典来保存单词
for word in handle:
word = word[:-1] # 去掉末尾的'\n'
if word not in words: # 使用关键字来盘ing这个单词是否出现
words[word] = 1 # 若是不存在,就将其value(出现次数设置为 1)
else:
words[word] += 1 # 若存在,就将其出现次数加 1
handle.close()
print (words)
# 当一个项目中的代码量较大时,我们就需要交给代码放入到多个文件中
# 可以使用 import 关键字 ,引入其他模块中的代码
# 方法一,引入整个模块
import add
print (add.Add(1, 2))
# 方法二,引入某个模块中的函数
CCfrom add import Add
print (Add(2, 3))
# 引入模块名,并且给模块名取一个别名
CCimport add
a = add
print (a.Add(4, 5))
# 模块的查找顺序为 先查找当前目录,在查找Python的安装目录.
# 这里来查看一下模块的查找路径
import sys
print (sys.path)
我们发现当你导入一个模块时,你当前目录下就会多一个xxx.pyc的文件,这个文件是用于保存你当前模块的二进制文本信息。
我们在C语言中是如何完成两个数的交换的
int a = 23,b = 34;
int tmp = a;
a = b;
b = tmp;
在python 中是如何完成两个数的交换的
x = 20
y = 39
print (x, y)
x, y = y, x
print (x, y)
若是你写了如下代码:
# python 中的函数 类 lamda 会改变变量的作用域
# if ,else,elif,while,for,try/catch 都不会改变作用域
if True:
i = 2
print (i)
print (i)
def func():
i = 2
print (i)
print (i)