Python学习之day02学习(函数模块的上传、数据类型+)
Python提供了一组技术,可以很好的实现共享,包括模块和一些发布工具
模块的发布流程如下:
一、函数模块的调试
- 函数转模块
这里采用了递归的方式依次递归得到每个元素
def print_lol(the_list):for each_item in the_list:if isinstance(each_item,list):print_lol(each_item)else:print(each_item)print_lol([1,2,3,4,5,6,7])
Python标准库(第三方模块PyPi)
Python Package Index(Python包索引)为Internet第三方Python模块提供一个集中的存储库 ,你可以使用PyPi发布你的模块
- 注释代码
一般采用三重引号建立多行注释,三重引号之间的所有内容被认为是一个注释
二、准备发布(distribution)
1.首先为模版创建一个文件夹,之后将nester.py复制到这个文件夹中,并给这个文件夹命名为nester
2.在新文件中创建一个setup.py文件(包含元数据)
from distutils.core import setupsetup(name='nester',version='1.0.0',py_modules=['nester'],author='fedu',author_email='ce@jfedu.net',url='http://www.jfedu',description='A simple printer of nested lists'
)
3.构建发布
在nester文件夹打开一个终端端口,输入一行命令: python setup.py sdist
发布安装到Python副本中(python setup.py install)
pyc这里编译之后加速的二进制虚拟机环境,可以保证py环境跨平台特性
Python模块实现命名空间
import nester
from nester import print_lol
from nester import print_lol as pl =====>pl(movie)
Python中所有的代码都与一个命名空间相关联。主程序代码与一个__main___的命名空间相关联,python会自动创建一个与模块同名的命名空间
第三方库包网站(pip install package)
python setup register
上传包至三方库
python setup sdist upload
使用阿里云第三方库
pip install -i https://mirrors.aliyun.com/pypi/simple/ requests
如何控制迭代指定的次数(range()),它可以用来生成从0到某个数的数字列表
for num in range(4):print(num)
## level用来遇到嵌套列表时插入制表符
def print_lol(the_list,level):for each_item in the_list:if isinstance(each_item,list):print_lol(each_item,level)else:for tab_shop in range(level):print("\t",end="")print(each_item)## 修改setup.py文件### 发版更新的三方模块库
python setup sdist upload
模块支持两个不同版本的API(对于所定义的函数,生成的不同函数API版本)
可选参数的使用
## level用来遇到嵌套列表时插入制表符
def print_lol(the_list,indent=false,level=0):for each_item in the_list:if isinstance(each_item,list):print_lol(each_item,indent,level+1)else:if indent:for tab_shop in range(level):print("\t",end="")print(each_item)
三、数据类型之字符串,列表,函数
字符串使用(str)
'abc'
>> 'abc'"abc"
>> 'abc'"""abc"""
>> 'abc's="abc汉字"
len(s)>> 5ascii(s)
>> "'abc\\u6c49\\u5b57'""ab'c"
>> "ab'c"'ab"c'
>> 'ab"c''ab\'c'
>> "ab'c""""abc"""
>> 'abc'"""
a
b
c
"""
>> '\na\nb\nc\n'## 字符串类型转换
type(b"abc")
>> <class 'bytes'>type(u"abc")
>> <class 'str'>"a""b"":c"
>> 'ab:c'## 字符串转义
r"abc\nd"
>> 'abc\\nd'"abc\nd"
>> 'abc\nd'str(2.2)
>> '2.2'## 字符串拼接'hello'+'world'
>> 'helloworld'"Python培训哪家强{}".format('halo')
>> 'Python培训哪家强halo'"%s %s" %(1,2)
>> '1 2'"Python我一定可以学好{0},{1}一定要开网页".format('good','me')
>> 'Python我一定可以学好good,me一定要开网页'## 字符串的拆分和合并
s="a,b,c"
>> s.split(',')
['a', 'b', 'c']>> ','.join(l)
'a,b,c's="abc"
>> s.find('a')
0>> s.find('b')
1>> s.find('c')
2>> s.find('v')
-1>> s[0]
'a'>> s[-1]
'c'>> s[2]
'c'
列表使用(list)
l=[1,4,2,3]
>> l.sort()l
>> [1, 2, 3, 4]
x=['abc','a','bc','bcd']>> x.sort(key=len)
>> x
['a', 'bc', 'abc', 'bcd']
元组使用(tuple)
只读属性,不能进行增加和删除,元组相较于列表占用空间小
>> empty_tuple=()
>> empty_tuple
()
>> num='1'
num
'1'
>> num=('1',)
num
('1',)
>> num='1','2','3'
>> num
('1', '2', '3')>> num='1',
>> type(num)
<class 'tuple'>## 元组解包
>> num=('1','2','3')
>> a,b,c=num
>> a
'1'
>> b
'2'## 数组和字符串之间的转换
>> l=('1','2','3')
l
('1', '2', '3')>> l=list(l)
l
['1', '2', '3']>> l=tuple(l)
>> l
('1', '2', '3')## 元素之间的交换### 方法1
c=0
>> c=a
>> a=b
>> b=c### 方法2
>> a,b=b,a### 列表原数的替换
>>> """
"""
'\n\n'
>>> l=[1,2,3]
l[0]="one">>> l
['one', 2, 3]>>> t=([1],[2],[3])
t
([1], [2], [3])>>> t[0][0]='1'
t
(['1'], [2], [3])
元组中虽然不能存放和添加数据,但是如果里面的元素是空list,可以使用空列比表来append添加元素
>> t[0][0]='1'
t
(['1'], [2], [3])>> t=(1,2,3)
>> t[0]
1>> y=([],[],[])
y[0].append(0)>> y
([0], [], [])
函数的使用(function)
### demo1 练习函数
def func_name():pass
func_name()
def get_name(num):if num == 1:return '666'elif num==2:return '888'
print(get_name(1)) ## 666
print(func_name()) ## None### demo2
thing=None
if thing:print('some thing')
else:print('no thing') ### no thing### demo3
thing=None
if thing is None:print('some thing')
else:print('no thing') ### some thing## demo4
def is_none(thing):if thing is None:print('None')elif thing:print('True')else:print('False')is_none(None)
is_none(True)
is_none(False)
is_none(0)## demo5
def name(n1,n2,n3):print(1,n1)print(1,n2)print(1,n3)
name('老大','老二','老三')
name('老二',n2='老大',n3='老三') ### 这里的默认参数可以不传参(位置参数),但是后面的数字不能将可变参数不能变化### demo6(默认情况下在函数运行时默认值就已经确定下来了)
def name(n2,n3,n1='老大'):print(1,n1)print(1,n2)print(1,n3)
name('老二','老三')## demo7
def box(arg1,result=[]):result.append(arg1)print(result)box('a')
box('b')def box(arg1):result=[]result.append(arg1)print(result)
box('a')
box('b')### demo8(这里none用于值类型初始化,当列表中存在类型元素返回的结果就是false)
def box(arg1,result=None):if result is None:result=[]result.append(arg1)print(result)
box('a')
box('b')## 但你使用的是函数结果是返回值时结果就是false
print(func_name) ### <function func_name at 0x00000250D4F03E20>
print(func_name()) ### None