热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【转载】Python简介及入门

原文出处:https:www.cnblogs.comzhangyafeiarticles10107110.html计算机原理基础?1234567前提:简述cpu内存硬盘操作系统应用

原文出处:https://www.cnblogs.com/zhangyafei/articles/10107110.html


计算机原理基础


?








1
2
3
4
5
6
7

前提: 简述 cpu 内存 硬盘 操作系统 应用程序
cpu: 计算机的运算核心和控制核心,就好像人类的'大脑'
内存: 负责数据与cpu直接数据交流处理,将临时数据和应用程序加载到内存,然后交由cpu处理。
      4g,8g,16g,32g
      造价高,断电即消失
硬盘: 磁盘(d盘,e盘)长久的存储数据:文件,应用程序。片二等数据,断电不消失
操作系统: 控制调度 硬件与软件资源额计算机程序,它是计算机最大的软件

一、Python的由来

  python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。  

  最新的TIOBE排行榜,Python重回前三

  

  

  由上图可见,Python整体呈上升趋势,反映出Python应用越来越广泛并且也逐渐得到业内的认可!!!

  Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等。互联网公司广泛使用Python来做的事一般有:自动化运维、自动化测试、大数据分析、爬虫、Web 等。


1.为什么是Python而不是其他语言?


?








1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

C 和 Python、Java、C#等
 
    C语言: 代码编译得到 机器码 ,机器码在处理器上直接执行,每一条指令控制CPU工作
 
其他语言: 代码编译得到 字节码 ,虚拟机执行字节码并转换成机器码再后在处理器上执行
 
Python 和 C  Python这门语言是由C开发而来
 
  对于使用:Python的类库齐全并且使用简洁,如果要实现同样的功能,Python 10行代码可以解决,C可能就需要100行甚至更多.
  对于速度:Python的运行速度相较与C,绝逼是慢了
 
Python 和 Java、C#等
 
  对于使用:Linux原装Python,其他语言没有;以上几门语言都有非常丰富的类库支持
  对于速度:Python在速度上可能稍显逊色

所以,Python和其他语言没有什么本质区别,其他区别在于:擅长某领域、人才丰富、先入为主。


2.Python的种类


?








1
2
3
4
5
6
7
8
9

Cpython
    Python的官方版本,使用C语言实现,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上。
Jyhton
    Python的Java实现,Jython会将Python代码动态编译成Java字节码,然后在JVM上运行。
IronPython
    Python的C#实现,IronPython将Python代码编译成C#字节码,然后在CLR上运行。(与Jython类似)
PyPy(特殊)
    Python实现的Python,将Python的字节码字节码再编译成机器码。
RubyPython、Brython …

3.python的语言分类


?








1
2
3
4
5
6
7
8

解释型:将代码一行一行的解释成二进制,然后逐行执行。
    缺点:执行效率低。
    优点:开发效率高,可以跨平台。
    代表语言:python。
编译型:将代码全部一次性编译成二进制,然后在执行。
    缺点:开发效率低,不能跨平台。
    优点:执行效率高。
    代表语言:C。

4.python的优缺点


?








1
2
3
4
5
6
7
8
9
10
11
12

优点:
    1,优美清新简单,入门容易,如果深入研究,可以写出非常非常复杂的程序。
    2,开发效率高。
    3,高级语言。
    4,可移植性。
    5,可嵌入性。
    6,可拓展性。
 
缺点:
    1,运行速度慢。
    2,源码不能加密。
    3,由于有GIL锁的存在,不能利用多线程。

5.python2和python3的区别


?








1
2
3
4
5
6
7

源码上的区别:
    pyhton2x:源码不规范。源码重复率较高。源码冗余。
    python3x:源码识重新整合,符合优美清晰简单的原则。
 
编码方式的区别:
    python3x:编码方式默认是utf-8,可以支持中文,英文。
    python2x:编码方式默认是ASCII,只包含英文字母,数字,特殊字符如果想显示中文:在首行加上# -*- encoding:utf-8 -*-。

二、Python环境

  1.安装Python

  windows


1.下载安装包:
  https://www.python.org/downloads/ 选择对应版本的Python下载即可
2.安装路径:默认C盘
  路径也可以选择。比如D:/python3
3.配置环境变量
  不过要记得配置环境变量
【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【Python安装目录追加到变值值中,用 ; 分割】

  linux

    无序安装,系统自带

  2.更新Python

   windows:卸载重装即可

  3.安装第三方包

    pip install package_name  或者 在pycharm中settings中安装


三、Python入门

  1.第一个python程序


#coding=utf-8
#-*- coding:utd-8 -*-
print("hello haha")
#以下代码用来打印一个信息
# 单行注释 # 多行注释
'''
print("hello world")
print("hello world")
print("hello world")
print("hello world")
'''

 第一个Python程序注意点:
运行方式有两种:
(1)在编辑器中编辑好py文件,保存。在命令行下到当前目录执行python 文件名.py
(2)在有python编译环境的编辑器里直接点解运行即可。如eclipse,pycharm。

  Python内部执行流程

2.

 

  2.pyc文件

    执行Python代码时,如果导入了其他的 .py 文件,那么,执行过程中会自动生成一个与其同名的 .pyc 文件,该文件就是Python解释器编译之后产生的字节码。

    ps:代码经过编译

    可以产生字节码;字节码通过反编译也可以得到代码。

  3.变量的定义和使用 

  变量的定义
  name = zhangyafei #定义了一个变量,这个变量的名字叫做name,它里面存储了一个数值zhangyafei

  变量的作用:昵称,其代指内存里某个地址中保存的内容

变量定义的规则

1.变量名只能是 字母、数字或下划线的任意组合
2.变量名的第一个字符不能是数字
3.以下关键字不能声明为变量名
  ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']

 


变量的赋值
score=100 #定义了一个变量,这个变量的名字叫做score,它里面存储了一个数值100
high = 180 #单位是cm
appleprice = 3.5 #苹果的价格 元/斤
weight = 7.5 #购买的苹果的重量 斤
mOney= appleprice * weight #如果money是第一次的话,那么就表示定义这个变量
mOney= money - 10 #如果mOney=xxxx不是第一次出现,那么就不是定义一个变量,而是给这个变量附上一个新的值

  4.输入、输出函数input(),print() 


# -*- coding:utf-8 -*-
#1.使用input获取必要的信息
name =input("请输入名字:")
qq=input("请输入qq:")
#2.使用print来打印名片
print("="*20)
print("姓名:%s"%name)
print("qq:%s"%qq)
print("="*20)

  输入密码时,如果想要不可见,需要利用getpass 模块中的 getpass方法,即:

import getpass

username = input('请输入用户名:')
pwd = getpass.getpass('请输入密码:')
print(username,pwd)

  5.流程控制与缩进

    需求一:用户登录验证  

1 # 提示输入用户名和密码
2
3 # 验证用户名和密码
4 # 如果错误,则输出用户名或密码错误
5 # 如果成功,则输出 欢迎,XXX!

import getpass

name = input('请输入用户名:')
pwd = getpass.getpass('请输入密码:')

if name == "zhangyafei" and pwd == "nb":
print("欢迎,zhangyafei!")
else:
print("用户名和密码错误"
View Code

    需求二、根据用户输入内容输出其权限

1 # 根据用户输入内容打印其权限
2
3 # zhang --> 超级管理员
4 # chen --> 普通管理员
5 # zhao --> 业务主管
6 # 其他 --> 普通用户

1 # -*- coding: utf8 -*-
2
3 name = input('请输入用户名:')
4
5
6 if name == "zhang":
7 print("超级管理员")
8 elif name == "chen":
9 print("普通管理员")
10 elif name == "zhao":
11 print("业务主管")
12 else:
13 print("普通用户"
View Code

  6.基本数据类型

   (1)数字


  2 是一个整数的例子。
  长整数 不过是大一些的整数。
  3.23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里,52.3E-4表示52.3 * 10-4。
  (-5+4j)和(2.3-4.6j)是复数的例子。

  int(整型)


    在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647     在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
  long(长整型)    跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。     注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。   float(浮点型)    浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。   complex(复数)     复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。
  注:Python中存在小数字池:-5 ~ 257

  (2)布尔值

  真或假
  1 或 0

        详情请看Fslse和None的区别

(3)字符串:用' xx' |"xx" | '''xx'''|"""xx"""连接的在python中叫字符串 


  万恶的字符串拼接:
  python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间。
    字符串格式化

# -*- coding: utf-8 -*-
"""
Created on Sat Jul 28 20:45:07 2018
@author: Zhang Yafei
"""
"""
格式化字符串的方式
方法一(%)
"""
# 格式的字符串与被格式化的字符串必须一一对应,需格式化的字符串多时,容易搞混
print('hello %s, you sex is %s.' %('tab', 'boy'))
# hello tab, you sex is boy.
print('hello %s, you sex is %s.' %('boy', 'tab'))
# hello boy, you sex is tab.
# 通过字典方式格式化,哪个字符将会格式化到哪里,清晰命了
print('hello %(name)s, you sex is %(sex)s.' %{'name': 'tab', 'sex': 'boy'})
# hello tab, you sex is boy.
args = {'name': 'tab', 'sex': 'boy'}
print('hello %(name)s, you sex is %(sex)s.' %(args))
# hello tab, you sex is boy.
#方法二(.format)
# 跟方法一第一种方式有点类似的格式化方式
print('hello {0}, you sex is {1}.'.format('tab', 'boy'))
# hello tab, you sex is boy.
# 注意:用字典方式格式化时,指定格式化字符时的位置可以调换
print('hello {name}, you sex is {sex}.'.format(sex='boy', name='tab'))
# hello tab, you sex is boy.
# '**'起到解包的作用
args = {'name': 'tab', 'sex': 'boy'}
print('hello {name}, you sex is {sex}.'.format(**args))
#推荐使用 .format 方法进行格式化字符串,一来清晰明了,二来效率更高(format 是字符串
# str 内置的方法)。更多关于 .format 的用法文档,用户可在交互模式下(终端输入 python
# or ipython or bpython ) 输入 help(str.format) 查看
View Code
字符串常用功能:




    • 移除空白 -> strip()

    • 分割 -> split()

    • 长度 -> length

    • 索引 -> []

    • 切片 ->[:]



 (4)列表

  创建列表

nums = [11,22,33,44,55]

基本操作:





    • 索引 -> [index]

    • 切片 ->[start:end]

    • 追加 ->append,extend

    • 删除 -> pop,remove,del

    • 长度 -> len

    • 循环 -> 可迭代对象 

    • 包含 ->contrains



 (5)元组

  创建元组

ages = (11, 22, 33, 44, 55)

ages = tuple((11, 22, 33, 44, 55))
基本操作:




    • 索引 -> [index]

    • 切片 ->[start:end]

    • 循环 -> 可迭代对象

    • 长度 -> len

    • 包含 ->contains



 (6)字典(无序)

person = {"name": "mr.wu", 'age': 18}

person = dict({"name": "mr.wu", 'age': 18})

常用操作:





    • 索引 -> [index]

    • 新增->dict[key]=value

    • 删除 -> del dict[key]

    • 键、值、键值对 -> key,value,key:value

    • 循环:可迭代对象

    • 长度:len


(7)集合

a = {11,22,33,44,55,66,77} a = set(11,22,33,44,55,66,77)

常用操作:



  • 新增 -> add

  • 删除 -> pop

  • 交 -> &

  • 去重 ->重点

  • 并 -> |

  • 补 -> difference


PS:循环,range,continue 和 break
7.运算符
  复合赋值运算(+-*/)
  

    if比较运算符(<    >   <=  >=  !=  <>)

  

    if 逻辑运算符 and or if not

   


sex = input("输入你的性别:")
if sex == "男":
print("你是男性,可以留胡子")
elif sex == "女":
print("你是女性,不可以留胡子")
else:
print("你是中性,想干啥干啥")
if elif 

#1.获取用户的输入
num = int(input("输入一个数字(1-7):"))
#2. 判断用户的数据,并且显示对应的信息
if num==1:
print("Monday")
elif num==2:
print("Tuesday")
elif num==3:
print("Wednesday")
elif num==4:
print("Thursday")
elif num==5:
print("Friday")
elif num==6:
print("Saturday")
elif num==7:
print("sunday")
else:
print("您输入的数字有误")
判断星期几

#如果当前用户是男性的话,难么就输入判断女性的要求
sex = input("输入你的性别:")
if sex == "男":
color = input("你白吗?") #白或者黄
mOney= int(input("请输入你的财产总和:")) #输入1000
beautiful = input("你美吗?") #美 或者不美
#if 白 并且 富 并且 美
#if 白 and 富 and,美:
if color=="白" and money>1000000 and beautiful=="美":
print("白富美……")
print("好羡慕……")
else:
print("黑穷丑……")
else:
print("判断男性的要求在下面")
color = input("你高吗?") #白或者黄
mOney= int(input("请输入你的财产总和:")) #输入1000
beautiful = input("你帅吗?") #美 或者不美
#if 白 并且 富 并且 美
#if 白 and 富 and,美:
if color=="高" and money>1000000 and beautiful=="帅":
print("高富帅……")
print("好羡慕……")
else:
print("矮穷矬……")
实例:白富美

 if条件总结   


if 条件:
xxxx
if 条件:
xxxxxx1
else:
xxxxx2
if 条件1:
xxxx1
elif 条件2:
xxxx2
elif 条件3:
xxxx3
else:
……
嵌套
if 嵌套
if xxx:
print("---1----")
if xxx2:
xxxxxxx

if xxx:
xxxx3
else:
xxxx
if xxx:
elif xxx:
xxxxx2
elif xxxx:
xxxx2
……
else:
xxxx
View Code

三目运算符


?








1

a = A if x>5 else B

 另一种写法


?








1

a = [A,B][x<5]

while 循环 

num = 1
while num <=10:
print(num) #print("%d"%num)
num=num+1

while总结


while 循环
while 条件:
条件满足的时候执行的事情

while 嵌套
while 条件:
条件满足的时候做的事情1
条件满足的时候做的事情2
。。。。
while 条件2:
条件2 满足的时候做的事情。。。。
while 条件:
1.站起来
2.坐下
3.站起来
while 执行5次
4.转1个圈
5.坐下

嵌套实例 


ticket = 1 #q表示有车票 0表示没有车票
knifeLenght = 48 #cm
#先判断是都有车票
if ticket==1:
print("通过了车票的检测,进入到了车站,接下来要安检了")
#盘DAU拿到的长度是否合法
if knifeLenght<=10:
print("通过了安检,进入了候车厅")
print("马上就要见到她了,好开心……")
else:
print("安检没有通过,等待公安处理")
else:
print("兄弟,你还没有买票呢,先去买票,才能进站……")
上火车

i = 1
while i<=9:

j = 1
while j<=i:
print("%d*%d=%d\t"%(j,i,i*j),end=" ")
j+=1
print("")
i+=1
打印99乘法表

for循环

for iterating_var in sequence:
statements(s)

  sequence即可迭代对象,内部实现了__iter__方法,for循环会遍历其中的每个值

例子

nums = [11,22,33,44,55]
for num in nums:
print(num)

神奇的for_else 

简述 英文原文 A break statement executed in the first suite terminates the loop without executing the else clause’s suite. A continue statement executed in the first suite skips the rest of the suite and continues with the next item, or with the else clause if there is no next item. 中文译文 用 break 关键字终止当前循环就不会执行当前的 else 语句,而使用 continue 关键字快速进入下一论循环,或者没有使用其他关键字,循环的正常结束后,就会触发 else 语句。

#触发else
list = [1,2,3,4,5]
for x in list:
print(x)
else:
print("else")

list = [1,2,3,4,5]
i = 0
for x in list:
continue
print(x)
else:
print("else")
#不触发else:
list = [1,2,3,4,5]
for x in list:
print(x)
break
else:
print("else")

总结
for else语句可以总结成以下。
  如果我依次做完了所有的事情(for正常结束),我就去做其他事(执行else),若做到一半就停下来不做了(中途遇到break),我就不去做其他事了(不执行else)。
  只有循环完所有次数,才会执行 else 。
  break 可以阻止 else 语句块的执行。

 

8.初始文件操作

打开文件:
open(文件名,访问模式)
f = open("test.txt","w")

打开文件的方式

r,以只读方式打开文件
w,打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a,打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
w+,打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

读取文件:f.read(),f.readline(),f.readlines()


f = open('test.txt', 'r')
cOntent= f.read(5)
print(content)
print("-"*30)
cOntent= f.read()
print(content)
f.close()

写入文件:f.write()

f = open('test.txt', 'w')
f.write('hello world, i am here!')
f.close()

关闭文件:f.close()

一些案例


#1.获取文件名
old_file_name = input("请输入要备份的文件名(需要后缀):")
#2。打开这个文件("r")
f_read = open(old_file_name,"r")
#new_file_name = old_file_name+"[复件]"
position = old_file_name.rfind(".")
new_file_name = old_file_name[0:position]+"[复件]"+old_file_name[position:]
#3.创建一个文件,xxx[复件].txt
f_write = open(new_file_name,"w")
#4.往源文件中读取内容,写入备份的文件中
#cOntent= f_read.read()
#f_write.write(content)
while True:
cOntent= f_read.read(1024)
if len(content)==0:
break
f_write.write(content)
#5.关闭两个文件
f_read.close()
f_write.close()
文件备份

import os
#1. 获取一个要重命名的文件夹的名字
folder_name = input("请输入要重命名的文件夹:")
#2.获取文件夹中所有的文件名字
file_names = os.listdir(folder_name)
'''
第一种方法
os.chdir(folder_name)
3.对获取的名字进行重命名即可
for name in file_names:
print(name)
os.rename(name,"[京东出品]-"+name)
'''
#第二种方法
for name in file_names:
#print(name)
old_file_name = "./"+folder_name+"/"+name
new_file_name = "./"+folder_name+"/"+"[京东出品]"+name
os.rename(old_file_name,new_file_name)
print(new_file_name)
批量文件重命名

 注:驼峰命名法

englishScore = 100 #小驼峰
english_score = 100 #下划线,推荐
EnglishScore = 100 #大驼峰
englishscore = 100 #不推介

推荐阅读
  • 本文将详细探讨PHP中C的作用,并对比其他编程语言如Java和C的特点及其适用场景。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 最适合初学者的编程语言
    本文探讨了适合编程新手的最佳语言选择,包括Python、JavaScript等易于上手且功能强大的语言,以及如何通过有效的学习方法提高编程技能。 ... [详细]
  • 汇编语言:编程世界的始祖,连C语言都敬畏三分!
    当C语言还在萌芽阶段时,它首次接触到了汇编语言,并对其简洁性感到震惊。尽管汇编语言的指令极其简单,但它却是所有现代编程语言的基础,其重要性不言而喻。 ... [详细]
  • 实践指南:使用Express、Create React App与MongoDB搭建React开发环境
    本文详细介绍了如何利用Express、Create React App和MongoDB构建一个高效的React应用开发环境,旨在为开发者提供一套完整的解决方案,包括环境搭建、数据模拟及前后端交互。 ... [详细]
  • 实现系统调用
    实现系统调用一、实验环境​本次操作还是基于上次编译Linux0.11内核的实验环境进行操作。环境如下:二、实验目标​通过对上述实验原理的认识,相信 ... [详细]
  • C#中调用OpenCTM打开.obj三维模型文件
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文详细介绍了在Luat OS中如何实现C与Lua的混合编程,包括在C环境中运行Lua脚本、封装可被Lua调用的C语言库,以及C与Lua之间的数据交互方法。 ... [详细]
  • Android 中的布局方式之线性布局
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文介绍了多维缩放(MDS)技术,这是一种将高维数据映射到低维空间的方法,通过保持原始数据间的关系,以便于可视化和分析。文章详细描述了MDS的原理和实现过程,并提供了Python代码示例。 ... [详细]
  • 本文详细介绍了 Java 中 org.apache.jena.atlas.lib.ByteBufferLib 类下的 acopyArray 方法,并提供了多个实际应用中的代码示例,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 本文详细介绍了PostgreSQL与MySQL在SQL语法上的主要区别,包括如何使用COALESCE替代IFNULL、金额格式化的方法、别名处理以及日期处理等关键点。 ... [详细]
  • 流处理中的计数挑战与解决方案
    本文探讨了在流处理中进行计数的各种技术和挑战,并基于作者在2016年圣何塞举行的Hadoop World大会上的演讲进行了深入分析。文章不仅介绍了传统批处理和Lambda架构的局限性,还详细探讨了流处理架构的优势及其在现代大数据应用中的重要作用。 ... [详细]
  • 大数据领域的职业路径与角色解析
    本文将深入探讨大数据领域的各种职业和工作角色,帮助读者全面了解大数据行业的需求、市场趋势,以及从入门到高级专业人士的职业发展路径。文章还将详细介绍不同公司对大数据人才的需求,并解析各岗位的具体职责、所需技能和经验。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
author-avatar
彭雅静政颖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有