文件名称:
实用Python教程——Easy Python精编版.pdf
开发工具:
文件大小: 1mb
下载次数: 0
上传时间: 2019-10-08
详细说明:自己原创的Python教程,求捧场啦~
作者:utmhikari
博客原文:https://utmhikari.github.io/categories/Easy-Python/
语雀:https://www.yuque.com/hikari-zy5c0/easy-python
源代码:https://github.com/utmhikari/Easy_Python第一话: HelloWorld——输入、输出与函数
前言
原文地址
Helloworld,是代码世界的入口。当我们采用 Python语言打下 print('e11 oworld')的那一刻,是
否想过 print这个函数,到底表示什么呢?到底能怎么用呢?再宏观地看,函数,它的作用体现在哪里呢?
在第一话,我们可以了解到以下的知识
函数与过程( function& process
输入&参数&关键字/无关键字参数( input, arguments,*args&** kwargs)
输出&返回( output& return)
Helloworld
学程序的第一行代码,大概都是 Hello world吧!
print(' Hello World!
然后命令行里,就会输出
Hello world
那如果要打出1行100个 Hello world的话,该怎么办呢?
如果这样的话
for i in range(100):
print(' Hello Wor ld'
试试看,会打出100行 Helloworld,不符合我们的需求
这个时候,该怎么办?
输入与输出
程序本质就是:输入->函数( function)->输出。输入的 raw data,经由一个叫函数的东西处理,就能
输出我们想要的数据
如果一个函数,没有输入输岀,也没关系。这样,函数就单纯是一个数据处理过程而已了。
在先前的 Helloworld,就似乎是这么一个结构
·输入: Hello world
函数: print
·输出:命令行中打出Hel| lo World
所以,咱们可以从函数入手:可不可以定制一下 print,让咱们的 Hello world能够打出来不换行呢?
看一看 print这个函数( function)的源码:
def print(self args, sep=', end='\n', file=None):
可以看到, print函数有个end=n的参数。顾名思义,每次pint一下,输出的字符串结尾都有一
个"n'。"\n'是换行符,那么就说明,单纯的 print100下,就会出100行 Helloworld嘞
因此,要解决咱们的需求也很简单,指定end为不换行,覆盖掉默认参数就好了~
for i in range (100)
print(' hello World', end=';')
试试看吧~
函数
函数, function,就像活字印刷的活字跟流水线上的机械处理器一样,是可以复用的处理过程,是通用的
功能。
函数的输入叫做参数( arguments,args);函数的输出可称作返回( return)。
print就是一个最典型的函数,我们写代码时常常 print数据出来调试。 print函数,就是这么实用。
现在让我们再次回顾一下 print的函数怎么定义的(def),这回,咱们把注释也给打出来
def print(self * args, sep=l, end='in', file=None)
print(value,.., sep=', end='\n', file=sys. stdout, flush=False)
Prints the values to a stream, or to sys. stdout by default
Optional keyword arguments:
file: a file-like object (stream)i defaults to the current sys. stdout
sep: string inserted between values, default a space
en
d
string appended after the last value, default a newline
fLush: whether to forcibly flush the stream
pass
参数
我们可以看到, print函数中,规定了这么些参数:*args,Sep,end,file
首先咱们来看第一个参数——*args。顾名思义,就是一堆参数( arguments)的称呼。参数开头为单星
号*,就代表这是一堆无关键字参数,就叫“无名参数”好啦
而像sep=xXX,end=XX之类的,都是参数名=参数值的结构,它们就叫——关键字参数( keyword
arguments, kwargs),如果要表示一堆关键字参数,我们可以用:** kwargs
说了这么些,不如咱们来试试输入:我爱你
print( Wo,'Ai,Ni)
输入了三个无名参数,结果是
Wo Ai Ni
可以看到,三个无名参数都被打出来了,都被空格分隔。这个时候,我们就知道sep参数( separator)的
作用了。所以,让我爱你不分隔的方法是
print( Wo,A
Ni
I sep='t
WoAiNi
最后一个fie参数,指定了我们在哪里 print出结果。默认值是sys. stdout,标准输岀流,咱们在cmd小黑
框里常看见的那些白字就是里边出来的啦。
不如,咱们试试把 WOAIN打进文件里?
#默认file=sys, stdout,系统标准输岀流
#因此要自定义fiLe,则应当要赋予同类型的参数
file应该指定成一个输出流,类似一个数据写入通道
# py thon内置了open(文件名',w')的方法,可以创造一个文件的写入流
#其中"w代表 write,即写入模式
#可不能单纯fie=" Woald.txt'喔,怎么能赋一个字符串上去惹
print('wo,Ai,Ni, sep=', file=open( woaini. txt,'w)
打开 python文件同目录下,是不是多了—个 woainl. txt啦~快去瞧瞧吧!
返回
说到这么多, print的返回值,真的是上面所说的"命令行中打出 Hello world"嘛
当然不是拉==
我们其实可以用 print打一下 print的返回值,了解一下:
a= print( woaini
print(a)
结果是
Woald
None
在 python里,None是一个抽象的符号,是 python内置的关键字(不是函数的关键字!),代表无,没有
数据。
也就是说, print,返回了None
so,命令行的输出算什么呢?
我们再拿个例子
def func(x, y)
print( woaini)
return x+ y
a,b=1,1
print(func(a, b)
打出来
woald
可以看到,最下边的 print,要打出函数func(a,b)的结果,因此先执行func。在执行func的期间,打出了
aini。然后才返回了x+y的结果。之后,才打出来1+1的结果,等于2
可以看到,我们要根据 return才知道函数返回什么,其它部分的输出都只是函数过程的副产物。没有
return,就默认返回None。
因此整个 print的过程,我们可以总结为
·参数:自定义参数(*args,sep之类)、 print的默认参数
·函数: print
·过程:打出 Hello world到标准输出流中,使得我们在命令行看到
返回:None
总结
函数无处不在,不仅是 print,就连你执行的 python脚本,本身也可以当做一个函数。
我们建一个文件:1.py,里面内容为
#导入内置的“系统功能〃模块:syS
Import sys
# print出执行1.py的参数
print (sys. argv)
然后,cmd命令行里进到1.py目录下,输入 python1.py123 abc gwer gogo ain看看结果吧
通过函数,我们可以把一个大的程序进行过程解耦,分解之为小的功能模块。每一个模块都有相应的输入
与输出,这样就把整一个程序串起来了。
至于输入、输岀与函数的底层,其实是个超级大坑,不是三言两语能够说清楚的。有兴趣的话,就谷歌一
番吧~
第二话:映射——输入、输出与函数的纽带
前言
原文地址
映射,代表了输入与输出的关系,而函数则是映射的实现。在我们日常 coding中,如果能用映射的方式表
示一段程序,还能进一步增强代码的可读性
在第二话,我们会了解到以下的知识
·映射( mappIng)
·字典及其映射实现(dict&hash
函数式编程& python示例( functional programming with its example
从dict开始说起
学 python的时候,我们一定会接触到dict(字典)这个数据结构。
dict结构展示了数据间(key与vaue)一一对应的关系,key作为一个查询索引,是不允许有重复的,而不
同key所对应的 value,则允许重复值的存在。
比如说,我们定义一群boys&gils,打出整个dict,再打出 girls有哪些,可以这样操作
import print
d= dicto
d['girU"]=["迪丽热巴',"王鸥',鬼鬼']
d["boy"']=['大碗宽面"
#用 print, print函数打印数据结构,使得其排版更加 pretty
print print(d, indent=2)
#单用 print, format,可以返回一个排版过后的字符串,打印出来要额外 print操作~
print('Girls are: s% pprint pformat(d[' girl)
打出来的效果是
{"boy":["大碗宽面"],‘girL":["迪丽热巴',"王鸥',‘鬼鬼']}
Girls are:['迪丽热巴',王鸥',"鬼鬼
我们可以很直观地看到这种对应关系
映射
像dict数据结构给我们展现的一样,数据间的对应关系,我们可以统称为:映射( Mapping)
如同第一话所说,程序的本质即为输入->函数->输出。输入和翰出,就是一种映射关系,而实现这种映射
的规则,就是函数。在dict里面,实现映射的函数,可以简化如下
def get value(key)
memory address of value hash (key
return get data from address memory address of value)
为了让我们便捷地从一个key访问到对应的 value,dic不可能把所有的key都过一谝找,那样费时费力。
取而代之,dict可以直接通过一种算法函数,称之为hash,就可以把key计算(映射)为一个数值,即
value的内存地址。我们通过这个内存地址,就可以取出对应的 value数据了,非常简单粗暴。
数据处理小需求
现在,让我们看这样一个需求。我们的输入是
input_List=[11,2,12,15,5,10,7,14,6,9,1,3,13,8,4]
也就是1~15的乱序。现在我们想输出这样的结果
如果大于10,输出字符串——这个数字大于10
如果小于等于10,输出字符串——这个数字小于等于10
被3整除的奇数不录入
这个需求并不难,我们可以轻易地打出以下的代码
output list =[
for i in input_List:
ii%2==00ri%3!=0
If 1 >10.
output_1ist. append("%d:大于10!%i)
else:
output_List. append("%d:小于等于10!'%i)
打出来的结果是
11:大于10!
2:小于等于10
12:大于10!
5:小于等于10!
10:小于等于10!
7:小于等于10!
14:大于10!
6:小于等于10!
1:小于等于10!
13:大于10!
8:小于等于10
4:小于等于10!
但是这段代码,层次清晰吗?如果代码逻辑变复杂了,会不会造成if-else的杂糅呢?
针对于此,我们看看另外一个方案
output= map(
Lambda×:"%d:大于10!1%×ifx>10eLse%d:小于等于10!%×,
filter(
Lambda x: x%2==0 or x%3=0
sorted(input_list)
打出来这个结果
1:小于等于10!
2:小于等于10
4:小于等于10
5:小于等于10
6:小于等于10!
7:小于等于10!
8:小于等于10
10:小于等于10!
11:大于10!
12:大于10!
13:大于10!
14:大于10!
我们把需求的毎一步通过函数块的方式隔离出来,而后进行嵌套。这样,代码的层次就更加清晰了。
分解过程,持续映射
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.