Python从入门到精通系列1__接触python基本语法

本文作为Python入门系列的第一部分,介绍了作者的创作计划和与Python的缘分,阐述了Python的基本语法,包括变量、条件判断语句、循环和函数的使用,并提供了与其他编程语言的对比,为初学者提供了学习Python的建议和参与开源项目的途径。
摘要由CSDN通过智能技术生成

专刊目录

创作计划

之所以把创作计划放在第一位,就是要先立个flag,凡事预则立,不预则废。接下来的3年时间里,我会每周都输出技术文章,作为一个新的五年计划的起点。接下来的系列主要是帮助各位小白入门,计划编程语言主要写3个系列,分别是Python,go,rust。数据库分别是MySQL,MongoDB,Redis这3个。然后就是高阶的如云计算、大数据、人工智能等技术与能力的输出专栏。最后是一些哲思和禅学思考。

专刊序言

过去几年里,我先后在国企、民营世界500强金融企业、大数据研究院、创业企业等做技术研发工作,有幸在工作之余,也利用工作之便走进高校完成了部分必修课的教学工作,先后在某本科高校教授过2个学期的Python程序设计、数据挖掘与分析等专业课程,在技术增长的同时,也输出了一些优秀的内容,如在百度AI社区写的一篇预测新冠疫情的notebook,已经有2万余次的浏览量。同时出版了几本自己参与编写的书籍等等。在接下来的5年时间里,我在创业工司奋斗的同时将会把自己遇到的一些技术问题,解决思路及管理上面的一些感悟及对于技术,对于生命,对于哲学等的思考分享在专栏中,希望自己将来可以从这些文章中吸取养分,如果各位看到文章的有缘人能感觉到有所成长,那对我来说就是无上荣耀,感恩!

Python序

和Python的结缘来自9年前的一个下午,我坐在学校图书馆的时候,看到书架上摆着一本与Python有关的书,就不经意间拿着它看了起来,虽然当时写Java也才2年,但是突然看到Python的语法,顿时感觉Java显得有些臃肿,记得那个时间段看Java编程思想,这本书的作者就写了他平时大部分用Java和Python,于是我就继续去寻找与Python有关的书,可是那个时候Python的书非常少,整个学校图书馆里面也没有基本,我就在网上跟着文档写起代码来,顺便还拉了我大学最好的朋友一起来学习Python,顺带提一句,我也拉他学习网络安全,他现在在奇安信工作,而我兜兜转转,也来了网络安全行业,来了大学时候很崇拜的一家公司的创业公司。所以为什么学Python,对不同的人来说目的不一样,我学它没有任何目的,纯粹就是因为好玩,而且简单。

Python语法入门

打印hello Word

print(‘hello word’)

这是学习每门编程语言都绕不过去的一个坎。

对比一下go语言打印的语法,让大家看看Python为什么简单

package main
import (
	"fmt"
)
func main() {
fmt.Printf("hello  world")
}

说到这里还得再说说打印变量
Python3.6之后有一个我最喜欢的f打印方法

a = 'hello  world'
print(f'my first python {a}')

Python中的变量

每个编程语言都需要存放一些数据的容器,给这些容器打上标签,这个标签就是变量。
对于Python这样的动态语言来说,万物皆对象,不需要提前申明变量类型,便可以给变量赋值。
Python的变量有几种基本类型。

# 字符串
foo = 'bar'
# 整型,浮点型
foo_int,foo_float = 1,1.0
# 列表
foo_list = []
# 集合
foo_set = {'haha',2}
# 字典
foo_dict = {'haha':2}

当然还有更多种不同的类型,以及更底层的如Cpython等的实现以后再细说
对比一下js的赋值

// 赋值需要关键字var
var foo = 'bar';

对比一下go语言的赋值和类型

// var identifier type
var foob, fooc int = 1, 2;
// 布尔型
var fooa bool = true
// 数字类型
rune
byte
uint8
无符号 8 位整型 (0255)
uint16
uint32
uint64
无符号 64 位整型 (018446744073709551615)
int8
有符号 8 位整型 (-128127)
int16
int32
int64
有符号 64 位整型 (-92233720368547758089223372036854775807)
float32
float64
complex64
complex128
uint
int
uintptr
//还有字符串类型、指针类型、数组类型、结构体、Channel、Map类型、接口、切片类型等等

Python变量可以写的东西实在太多了,在下一篇文章聊聊,暂时就先熟悉一下,打个照面

Python的条件判断语句及循环

首先是Python的条件判断语句

# if...else语句
if xxx:
	dosomething()
else:
	doothers()
# if...elif...else语句
if xxx:
	dosomething()
elif xxx1:
	doxxx1()
elif xxx2:
	doxxx2()
elif xxx3:
	doxxx3()
else:
	doothers()
# 还有即将在Python3.10以后加入的Switch-Case Statements

switch EXPR:
    case EXPR:
        SUITE
    case EXPR:
        SUITE
    ...
    else:
        SUITE

接着是Python的循环语句

# while语句
while xxx:
	dosomething()
# while...else语句
while xxx:
	dosomething()
else:
	doothers()
# for语句

for <variable> in <sequence>:
    <statements>
else:
    <statements>

对比对比go语言的条件判断语句会发现go多了一堆大括号

Python中的函数

解下来举个最简单的例子
比如你要打印斐波那契数列,斐波那契数列在自然界中非常常见,生活中、工作中也是。在敏捷开发的过程中估计复杂度用的1,2,3,5,8,13等的扑克牌就是斐波那契数列。

# 普通方法打印斐波那契数列
def fibo(n):
    a,b = 1,1
    for i in range(n-1):
        a,b = b,a+b
    return a

# 递归打印斐波那契数列
def recur_fibo(n):
   """递归方法
   输出斐波那契数列"""
   if n <= 1:
       return n
   else:
       return(recur_fibo(n-1) + recur_fibo(n-2))

可以看到,声明一个函数需要3元素,首先是def关键字,然后是函数名(参数),接着是函数体
再对比对比go语言的实现,所用行数比python多了一倍。

package main
import "fmt"
func fibo(num int) int{
	if num<2{
		return 1
	}
	return fibo(num-1) + fibo(num-2)
}
func main(){
	for i := 0; i<10; i++{
		nums := fibo(i)
		fmt.Println(nums)
	}
}

Python中的类

接下来就快步进入到面向对象的环节,首先来看一个类对象,Python类对象名要用驼峰命名法,其他命名采用下划线命名法,更多标准可以看pep8规范

# 创建一个动物类对象
class Animal(object):
	def __init__(self,name)
		self.name = name
    def run(self):
        print(f'{self.name} running')
    def eat(self):
        print(f'{self.name} eating')
    def sleep(self):
        print(f'{self.name} sleeping')
# 实例化一个动物类
>>> cat = Animal('cat')
# 调用类对象方法
>>> cat.eat()
cat eating
>>> dog = Animal('dog')
>>> dog.sleep()
dog sleeping
>>> type(dog)
<class '__main__.Animal'>
>>> type(Animal)
<class 'type'>

之前提过,对于Python来说,万物皆对象,所以Python的面向对象可以说是Python中最重要的概念,程序中除了通过class关键字定义的类是一个对象外,Python基本类型数据也是对象,一个字符数据是一个对象,一个浮点数数据也是一个对象,如:

>>> a = 1
>>> type(a)
<class 'int'>
>>> isinstance(a, int)
True
>>> type(int)
<class 'type'>
>>> b = "1"
>>> type(b)
<class 'str'>
>>> isinstance(b, str)
True
>>> type(str)
<class 'type'>

再推广开来,Python的类型也是一种对象,如:

>>> str
<class 'str'>
>>> float
<class 'float'>
>>> list
<class 'list'>

更深的就暂不细说了,以后会在专栏中写深入的文章来讨论
接下来看看go语言的类,做一个对比
在 go 语言中, type name struct{} 结构体 就相当于Python语言中的 class 类的概念

package main

import (
"fmt"
"strconv"
)
type Animaler interface {
	run()
	sleep()
    eat()
}
type Animal struct {
    name string
}
// 实现 run() 方法
func (animal Animal) run() {
    fmt.Println(animal.name + "runing")
}
// 实现 sleep() 方法
func (animal Animal) sleep() {
    fmt.Println(animal.name + "sleeping")
}
// 实现 eat() 方法
func (animal Animal) eat() {
    fmt.Println(animal.name + "eating")
}
type Cat struct {
    Animal
}
type Dog struct {
    Animal
}
func main()  {
    dog := Dog{Animal:Animal{name:"大黄"}}
    dog.run()
    cat := Cat{Animal:Animal{name:"(>^ω^<)喵"}}
    cat.sleep()
}

学习Python的一点小小的建议

  1. 首先,一定要把Python的基础打牢,掌握整个语言的基本语法
  2. 大学生要按照自己的兴趣爱好来熟悉不同的各个领域的Python库,不要自我局限于某几个库
  3. 尝试参加一些开源的Python项目,通过开源项目增加自己的工程能力

如何跟着一个开源项目学习用Python做软件

比如想要介入爬虫领域,几个工具库是避不开要学习的
我这里就简单以requests,selenium python端的代码为例来聊一聊,之后也计划开几个python、go的经典库的源码带读系列。
这里先从低版本的代码开始

git clone https://github.com/psf/requests/tree/v0.2.0

或者使用checkout

git clone https://github.com/psf/requests.git
git checkout v0.2.0
cd requests

在使用git拉代码后,我们可以使用branch看看分支、用checkout切换分支

git branch -a
git checkout -b newbranch

然后看看requests的基本使用

import requests
>>> conv_auth = requests.AuthObject('requeststest', 'requeststest')
>>> r = requests.get('https://convore.com/api/account/verify.json', auth=conv_auth)

>>> r.status_code
200

>>> r.headers['content-type']
'application/json'

>>> r.content
'{"username": "requeststest", "url": "/users/requeststest/", "id": "9408", "img": "censored-long-url"}'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mrzky001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值