幼儿零基础学python_【幼儿园级】0基础学python一本通(下)——AI未来系列2

本篇为AI未来系列第二篇,基础部分完结。为什么要研究学习python?python是未来屠龙的屠龙宝刀,再辅助以我们的高中数学基础(足够用的屠龙术),小白们即可把握人工智能的未来。本系列初步阶段主要攻克数据分析问题,中阶攻克爬虫问题,高阶进入人工智能阶段,顺带会穿插一些硬件知识。

想想这种偶然中的必然,心潮澎湃。Furture is coming,just do it。时不我待,今天是2019年2月13日农历初九,赶紧开始第二篇——幼儿园级,老妪也会,0基础学python一本通(下)。

六、函数

函数基本框架如下(【】中的内容表示是或选的,可以不写):

def 函数名(参数):

【'''函数说明文档'''】

函数主体

【return 返回对象】

函数小例子

#我们先定义一个函数

def find_max(series):

'''查找一个序列中最大值'''

the_max = series[0]

for j in series:

if j >= the_max:

the_max = j

return the_max

#调用函数

series = [1,20,23,1111,222,-10]

print('序列最大值:',find_max(series))

序列最大值: 1111

默认参数的使用

def pos_neg(x=1):

if x > 0:

print(x,'是正数')

else:

print(x,'不是正数')

pos_neg() #这里没有传入参数x,仍然可以运行,因为在未传入参数的情况下,默认x参数为1

1是正数

pos_neg(-10) #当然自己也是可以传入参数

-10不是正数

事实上,在调用很多python函数时,我们都使用了默认的参数设置

可变参数

def summation(*series): #注意这里参数前面的有一个* 表示的series这个参数是可变参数

'''求一个序列元素的加和'''

sum = 0

for i in series:

sum += i

return sum

summation(1,2,3,4,5,6,7) #可变参数的设置 使得我们可以传入任意个参数 函数调用时会自动组装为一个tuple

28

如果不设置为可变参数的话,需要传入一个序列形式的参数

def summation(series):

'''求一个序列元素的加和'''

sum = 0

for i in series:

sum += i

return sum

summation(1,2,3,4,5,6,7) #这样输入就会报错

报错

summation([1,2,3,4,5,6,7])

28

关键词参数

def info_insert(name, age, university, **other):

print('姓名:',name,'年龄:',age,'学校:',university,'其他信息:',other)

注意参数**other,这个参数允许我们传入任意个含参数名的参数,这些关键词参数在函数调用时会自动组装为一个dict

例如我们在做信息录入时,姓名,年龄,学校是必填信息,而其他信息是选填的,这时候就可以使用关键词参数

info_insert('娜塔莎 罗曼诺夫',99,'圣地亚哥大学')

姓名: 娜塔莎 罗曼诺夫 年龄: 99 学校: 圣地亚哥大学 其他信息: {}

info_insert('娜塔莎 罗曼诺夫',99,'圣地亚哥大学',性别='女',工作='特工')

姓名: 娜塔莎 罗曼诺夫 年龄: 99 学校: 圣地亚哥大学 其他信息: {'性别': '女', '工作': '特工'}

混合参数

在python函数定义中,可以用必选参数,默认参数,可变参数,关键词参数。注意这些参数的定义顺序为:必选参数,默认参数,可变参数和关键词参数

def info_insert(name, age, married='未婚',*schools, **kw):

2

print('姓名:',name,'年龄:',age,'婚姻状况:',married,'就读学校:',schools,'其他信息:',kw)

info_insert('娜塔莎 罗曼诺夫',99)

姓名: 娜塔莎 罗曼诺夫 年龄: 99 婚姻状况: 未婚 就读学校: () 其他信息: {}

info_insert('娜塔莎 罗曼诺夫',99,'已婚','浙江大学','上海财经大学')

姓名: 娜塔莎 罗曼诺夫 年龄: 99 婚姻状况: 已婚 就读学校: ('浙江大学', '上海财经大学') 其他信息: {}

info_insert('娜塔莎 罗曼诺夫',99,'已婚','浙江大学','上海财经大学',性别='女',工作='特工')

姓名: 娜塔莎 罗曼诺夫 年龄: 99 婚姻状况: 已婚 就读学校: ('浙江大学', '上海财经大学') 其他信息: {'性别': '女', '工作': '特工'}

递归函数

递归函数的含义是在函数定义过程中,会调用函数本身

def factorial(n):

'''计算n的阶乘'''

if n == 1:

return 1

else:

return n*factorial(n-1)

factorial(5)

120

匿名函数——lambda函数

lambda函数的基本格式为: lambda 参数: 表达式

匿名函数定义更为简便(控制在一行),有些简单的函数可以用它来写,或者作为复杂函数的组成部分

s = lambda x:print(x,'大于 1') if x>1 else print(x,'小于 1')

定义函数

s(10)

s(-10)

10 大于 1

-10 小于 1

七、模块

模块简单来说是一个保存了python代码的文件

很多python开源库就是模块

#例如我们调用科学计算库 numpy

import numpy as np #as np是为了之后方便调用

from pandas import DataFrame #只调用模块下的一个子模块

from numpy import * #导入模块中的所有子模块

print('调用numpy产生10个标准正态随机数\n',np.random.randn(10))

调用numpy产生10个标准正态随机数

[-0.86123492 -0.91268667 0.83897686 0.29236517 -1.30950825 -1.14943404

-0.36781918 0.13990052 0.4298387 -0.80505142]

#对于一个模块 我们可以先查看该模块下的所有子模块、变量和函数

import math

print('查看math模块下的所有子模块、变量和函数',dir(math))

查看math模块下的所有子模块、变量和函数 ['doc__', '_file_', '_loader_', '_name_', '_package_', '__spec', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']

八、异常处理

在程序编写过程中,难免会有一些错误。python中有一些语句可以处理这些异常或者错误,使得程序能够运行,且识别到错误的位置

try..except函数

在下面的例子中,当j=0,10/0是会报错的,利用try..except语句之后还是可以将其他部分正常运行出来

x = 10

for j in [0,1,2,3]:

y = x/j

print(y)

x = 10

for j in [0,1,2,3]:

try:

y = x/j

print(y)

except :

print('除数不能为0')

除数不能为0

10.0

5.0

3.3333333333333335

x = 10

for j in [0,1,2,3]:

try:

y = x/j

print(y)

except ZeroDivisionError: #可以写出异常的类型

print('除数不能为0')

除数不能为0

10.0

5.0

3.3333333333333335

九、面向对象

面向对象是Python的特点。面向对象主要通过类class的定义来实现。类class是用来描述具有相同属性和方法的对象的集合。类定义了该集合中的每个对象的共有属性和方法

可以将类理解为一个模块,模块中包含很多个函数,每个函数用来实现某一个功能

对象是根据类创建的实例,通过实例化对象就可以执行类中的各个函数

面向对象不好理解。这里用一个小例子来说明面向对象的基本用法,关于面向对象在后面的系列中还会详述其更高层次的用法

例如,我们想创建一个简单的游戏程序,涉及到游戏人物的创建,几个游戏环节的设计等等

class charater:

'''创建游戏人物'''

def __init__(self, name, gender, age, ability):

self.name = name

self.gender = gender

self.age = age

self.ability = ability

def fight_grass(self):

self.ability = self.ability - 200

print('%s参加了一次野外战斗,消耗战斗力200' %self.name)

def self_trainng(self):

self.ability = self.ability + 100

print('%s参加了一次自我修炼,增长战斗力100' %self.name)

def mass_fight(self):

self.ability = self.ability - 500

print('%s参加了一次多人PK,消耗战斗力500' %self.name)

def show_info(self):

print('%s,%s岁,%s,%s战斗力' %(self.name,self.age,self.gender,self.ability))

#定义好上面的类之后 我们就可以开始游戏了 我们先创建3个游戏人物 rogers stark 和 natasha

rogers = charater('史蒂夫 罗杰斯','男',18,1000)

stark = charater('托尼 斯塔克','男',20,1800)

natasha = charater('娜塔莎 罗曼诺夫','女',19,2500)

# 先查看 三个游戏人物的 属性

rogers.show_info()

stark.show_info()

natasha.show_info()

史蒂夫 罗杰斯,18岁,男,1000战斗力

托尼 斯塔克,20岁,男,1800战斗力

娜塔莎 罗曼诺夫,19岁,女,2500战斗力

# 创建人物之后 每个人物可以进行不同的游戏环节 例如他们三个人 进行不同的游戏环节

rogers.mass_fight()

stark.self_trainng()

natasha.fight_grass()

史蒂夫 罗杰斯参加了一次多人PK,消耗战斗力500

托尼 斯塔克参加了一次自我修炼,增长战斗力100

娜塔莎 罗曼诺夫参加了一次野外战斗,消耗战斗力200

# 在经过了上面的环节之后 我们再来查看三个游戏人物的属性是否产生了变化

rogers.show_info()

stark.show_info()

natasha.show_info()

#可以发现 三个游戏人物在经历游戏环节之后 战斗力都发生了改变

史蒂夫 罗杰斯,18岁,男,500战斗力

托尼 斯塔克,20岁,男,1900战斗力

娜塔莎 罗曼诺夫,19岁,女,2300战斗力

十、文件读写

在进行数据分析之前,可能需要读写自己的数据文件。或者在完成数据分析之后,想把结果输出到外部的文件

在Python中,利用pandas模块中的几个函数,可以轻松实现这些功能,利用pandas读取文件之后数据的格式为数据框,且如果想用pandas将数据输出为外部文件,也要先确保要输出的文件的格式为数据框

注意因为这里演示了文件的操作,需要将文件上传到网站的数据文件目录下才可以成功运行程序

import pandas as pd

#首先导入pandas库 as pd是将这个库缩写 之后调用这个库 只需要写pd就可以了 而不用写全称pandas

10.1 读取txt文件

text = pd.read_table('data/test2.txt',index_col=0,delimiter=' ')

# 文件所在的路径是必须输入的

# index_col=0指定第一列为index

# delimiter指定了数据间的分隔符,分隔符可以使空格,制表符,;等等

# 这个函数中还有很多参数可以定义

text

10.2 读取excel/csv文件

data_excel = pd.read_excel('data/test3.xlsx')

2

# 文件所在的路径是必须输入的

3

data_excel.head()

data_csv = pd.read_csv('data/test3_csv.csv',encoding='GBK')

2

# 文件所在的路径是必须输入的

3

#这里要注意,encoding='GBK'一般是要加上,涉及到编译解码的问题

4

data_csv.head()

10.3 输出为excel/csv文件

注意因为这里演示了文件的操作,需要将文件上传到网站的数据文件目录下才可以成功运行程序

#DataFrame生成 这里生成了一个数据框 各位可以先不考虑这个细节,在之后的pandas库中详细说明了数据框的所有操作 这里只是为了说明文件的输出

data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],

'year': [2000, 2001, 2002, 2001, 2002],

'pop': [1.5, 1.7, 3.6, 2.4, 2.9]}

frame = pd.DataFrame(data)

frame.head()

# 将数据集frame输出为外部文件

frame.to_excel('data/写出为excel.xlsx')

frame.to_csv('data/写出为csv.csv')

来源:我的印象笔记整理

ABO

Me

JiangShi【ID:siteacher】

AI CREATE FURTURE

VALUE LAST LONG

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值