Python语言基础(3)

6. 函数

对任何编程语言来说,函数都是最重要的模块化,代码可重用化的手段。Python函数的定义方法如下:


def 函数名(参数1, 参数2, ...):

    函数体

Python函数用return关键字返回,如果return后没有带返回值,或没有执行return函数就结束了,则返回None

6.1 位置参数和关键字参数

Python函数的参数分为位置参数和关键字参数。

位置参数比较好理解,就是常见的函数参数,调用时按顺序传入参数即可。

关键字参数一般放在位置参数之后,在定义函数时指定缺省值。调用时可不按关键字参数定义的顺序,用“参数名 = 调用值”的形式给参数赋值。

如果不给关键字参数赋值,则使用定义的缺省值。

In [66]:
def fun1(x, y, z=1.5):
    if z > 1:
        return z * (x + y)
    else:
        return z / (x + y)

对以上函数来说,以下三种调用方式都可以。

In [67]:

fun1(5,6.1, z=0.7)

Out[67]:
0.06306306306306306
In [68]:
fun1(5, 6.1, 0.7)

Out[68]:
0.06306306306306306
In [69]:

fun1(5,6.5)

Out[69]:
17.25

6.2 返回多个值

返回多个值,也是Python非常酷的一个功能。这主要归功于Python的元组,这里正是应用了元组的拆包功能。

In [70]:
def fun2():
    a = 5
    b = 6
    c = 7
    return a, b, c
a, b, c = fun2()
a, b, c

Out[70]:
(5, 6, 7)

6.3 匿名函数(lambda函数)

lambda函数又是Python非常酷的一个功能。前面讲到,Python函数可以作为另一个函数的参数,这时候采用匿名函数,经常可以大大简化代码。

例如,以下两种定义函数的方式,前者是传统的函数定义方式,后者就是一个lanmbda函数。

In [71]:

deff1(x):
    returnx * 2
lambda x: x * 2

Out[71]:
<function __main__.<lambda>>

未来会在数据分析的学习中,应用到匿名函数。

7. 文件操作

用Python内置的open()打开文件,默认打开模式是“r”读模式,如果处理中文,需要带上encoding参数,open()函数返回一个文件句柄。

In [72]:
path = '../data/part1_file1.txt'
f = open(path, encoding='utf-8')

打开后可以像处理列表一样,逐行读取文件。

In [73]:

for line in f:
 print(line)

中国中国

1111

aaaa

文件处理结束后,一定要关闭文件句柄,否则会造成内存泄露。

In [74]:


f.close()

以上的文件操作,如果发生文件不存在的情况,程序就会出错中断。在实际编程中,经常使用以下的条件判断,当文件打开成功时才进行文件操作,否则就不执行。这样整个程序不会被中断。

In [75]:


with open('tmp.txt','w', encoding='utf-8'as f:
 f.write('abc')
 f.write('中国')
 f.close()

Python还可以对磁盘文件进行删除、复制、移动等各种操作

In [76]:
import os
os..remove('tmp.txt')

  File "<ipython-input-76-9ebbfc39eca8>", line 2
    os..remove('tmp.txt')
       ^
SyntaxError: invalid syntax


Python对文件的操作还有很多功能和方法,这里不详细赘述,后面用到了再介绍。

8. 数据库操作

这里用SQLite为例,演示Python的数据库操作。Python自带了一个SQLite3模块,以及对应的API库sqlite3,无需另外安装。如果要访问MySQL或SQL server数据库,需要另外安装数据库软件。

In [77]:

# 引入API模块
importsqlite3

# 创建一个数据库连接,不同的数据库,连接参数有所不同
conn =sqlite3.connect('test.db')

# 创建一个表。
conn.execute('''CREATE TABLE COMPANY
(ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL);''')

Out[77]:
<sqlite3.Cursor at 0x5969570>
In [78]:
# 插入一条数据记录
conn.execute("insert into COMPANY(id, name, age, address, salary) values(1, '张三', 30, '中山路100号',3500)")

Out[78]:
<sqlite3.Cursor at 0x59690a0>
In [79]:

cursor =conn.execute('select * from COMPANY')
forvin cursor:
    print(v)
# 查询。查询结果会先保存在一个游标对象中,然后通过循环遍历。

(1, '张三', 30, '中山路100号', 3500.0)
In [80]:

#提交当前的事务。
#Python的数据库操作是事务性的,如果没有提交就关闭数据库连接,那么上一次提交后对数据库的修改都不会被写进数据库
conn.commit()

In [81]:

#务必关闭数据库连接,否则容易造成内存泄露
conn.close()

数据库的操作经常是在网络环境下进行的,存在比较多的异常情况。因此,在数据库操作的编程实践中,一般都要采用前面降到的try-exception-finally结构,捕获异常,保证程序端一直处于正常运转中。因此,以上的程序代码可以修改为:

In [82]:

# 引入API模块
importsqlite3
# 创建一个数据库连接,不同的数据库,连接参数有所不同
try:
 conn =sqlite3.connect('test1.db')

# 创建一个表。
 conn.execute('''CREATE TABLE COMPANY
  (ID INT PRIMARY KEY NOT NULL,
  NAME TEXT NOT NULL,
  AGE INT NOT NULL,
  ADDRESS CHAR(50),
  SALARY REAL);''')
 conn.execute("insert into COMPANY(id, name, age, address, salary) values(1, '张三', 30, '中山路100号',3500)")
 cursor =conn.execute('select * from COMPANY')
 for in cursor:
     print(v)
 conn.commit()
exceptExceptionas err:
 print("捕获异常:" ,err)
finally:
 conn.close()

(1, '张三', 30, '中山路100号', 3500.0)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值