45-Python知识点第一次查漏补缺

       近来时间较为充足,又因为以前没有系统的学过Python,所以这次就详细的看下相关知识点,扫除下盲点。我本次看的教程是莫烦Python感觉作者写的很认真很详细,我下面将记录本次学习中发现的盲区,本来比较懒,很多会直接复制,望作者见谅。

传送门:莫烦Python

 

目录

一、Windows 下安装

二、基础数学运算

三、循环(while、for及内置集合对象)

1 数字

2 None 类型

3 集合类型

4.一个for的例子:

5.range使用

6.内置集合

①tuple:

②dictionary:

③set:

④ 迭代器:

⑤ 生成器:

四、if 判断

①行内表达式:

② if,elif, else的例子:

五、def 函数

1.函数调用与传参

2.函数的可变参数传参

3.函数的关键字参数

六、全局变量


一、Windows 下安装

方法:去官网下载自己需要的版本安装即可,主要,需要配置两个环境变量。

一个是python安装路径:     E:\software\python\py3.6

一个是为了使用pip配置的:E:\software\python\py3.6\Scripts

环境变量配置方法:点击此电脑-》属性-》高级系统设置-》环境变量-》Path-》添加上面的两个路径(根据自己安装的)。

检验是否安装成功:

在命令窗口测试,打开方式windows键+R,输入cmd,回车。

二、基础数学运算

1.python中平方两个**表示,如3的平方为3**2 , **3表示立方,**4表示4次方,依次类推。

2.python中%取余,//取整(效果相当于int())。

    运行结果:  

三、循环(while、for及内置集合对象)

1 数字

整数和浮点数也能进行 Boolean 数据操作, 具体规则,如果该值等于 0 或者 0.0 将会返回 False 其余的返回 True.

a = 5
while a:
    print(a, end=' ') # 表示输出a之后不使用默认的回车结束,而使用空格
    a -= 1

运行结果:

2 None 类型

如果 while 后面接着的语句数据类型 None, 将会返回 False

a = None
while a:
    print('aaaaaa')
print('----')

运行结果:

3 集合类型

在 Python 中集合类型有 list、 tuple 、dict 和 set 等,如果该集合对象作为 while 判断语句, 如果集合中的元素数量为 0,那么将会返回 False, 否则返回 True

list = range(10)
while list:
    print(list[-1], end=',')
    list = list[:len(list)-1]

运行结果:

4.一个for的例子:

list = range(10)
for i in list:
    print(i, end=',')

运行结果:

5.range使用

在 Python 内置了工厂函数,range 函数将会返回一个序列,源码中介绍为:

class range(object):
    """
    range(stop) -> range object
    range(start, stop[, step]) -> range object
    
    Return an object that produces a sequence of integers from start (inclusive)
    to stop (exclusive) by step.  range(i, j) produces i, i+1, i+2, ..., j-1.
    start defaults to 0, and stop is omitted!  range(4) produces 0, 1, 2, 3.
    These are exactly the valid indices for a list of 4 elements.
    When step is given, it specifies the increment (or decrement).
    """

三个参数依次表示,区间的第一个数,最后一个数,区间内相邻数间隔(即步长),注意区间为左闭右开(即[start,stop))。

注意:start 默认为0, step 默认为1,同时step可以设置为负数。

a = list(range(10))     # range(stop)
b = list(range(2,10))   # range(start, stop)
c = list(range(2,10,2)) # range(start, stop, step)
print('list_a', a)
print('list_b', b)
print('list_c', c)

运行结果:

6.内置集合

Python 共内置了 list、 tuple 、dict 和 set 四种基本集合,每个 集合对象都能够迭代。

①tuple:

类似数组,但是其值是不能改变的。

test_list1 = ('a', 'b', 'c')
test_list2 = ['x', 'y', 'z']
test_tuple = tuple(test_list2)
# test_list2 可以修改,tuple() 函数不是改变值的类型,而是返回改变类型后的值,原值不会被改变
test_list2[2] = '这是修改的'
# 下面这行报错,元组不可修改
# test_list1[2] = '这是修改的'
print(test_list1)
print(test_list2)
print(test_tuple)

运行结果:

②dictionary:

dic = {}
dic['name'] = 'ystraw'
dic['age'] = 18
dic['vertion'] = 3.6
for key in dic:
    print(key, dic[key])

运行结果:

注意:字典中 key 是乱序的,也就是说和插入 的顺序是不一致的。如果想要使用顺序一致的字典,请使用 collections 模块 中的 OrderedDict 对象。

③set:

跟C++中类似,就是乱序元素的集合,无序且不重复。

s = set(['python', '重复', '重复','python'])
for item in s:
    print(item)

运行结果:自动去重了

 迭代器:

Python 中的 for 句法实际上实现了设计模式中的迭代器模式 ,所以我们自己也可以按照迭代器的要求自己生成迭代器对象,以便在 for 语句中使用。 只要类中实现了 __iter__ 和 next 函数,那么对象就可以在 for 语句中使用。 现在创建 Fibonacci 迭代器对象。

class Fib(object):
    def __init__(self, max):
        self.max = max
        self.n, self.a, self.b = 0, 0, 1

    def __iter__(self):
        return self

    def __next__(self):
        if self.n < self.max:
            r = self.b
            self.a, self.b = self.b, self.a + self.b
            self.n = self.n + 1
            return r
        raise StopIteration()

# using Fib object
for i in Fib(5):
    print(i, end=',')

运行结果:

 生成器:

除了使用迭代器以外,Python 使用 yield 关键字也能实现类似迭代的效果,yield 语句每次 执行时,立即返回结果给上层调用者,而当前的状态仍然保留,以便迭代器下一次循环调用。这样做的 好处是在于节约硬件资源,在需要的时候才会执行,并且每次只执行一次。

def fib(max):
    a, b = 0, 1
    while max:
        r = b
        a, b = b, a+b
        max -= 1
        yield r
# using generator
for i in fib(5):
    print(i, end=',')
print()
print(fib(5))
print(type(fib(5)))

运行结果:fib(5)调用函数时,函数内循环执行 yield, 每次执行时,会将 r值即上一步的b值返回调用者,并构成一个迭代对象。

四、if 判断

①行内表达式:

类型与C中的三目运算符,condition ? value1 : value2 ,在Python中可以用行内表达式达到同样的效果。

var = var1 if condition else var2

如果 condition 的值为 True, 那么将 var1 的值赋给 var;如果为 False 则将 var2 的值赋给 var

b = 3
a = 1 if b > 3 else 0  # 行内表达式, 类似于C中的三目运算符:condition ? value1 : value2
print(a)  # out: 0
a = 1 if b >= 3 else 0
print(a)  # out: 1

运行结果:

② if,elif, else的例子:

x = -4
if x > 1:
    print ('x > 1')
elif x < 1:
    print('x < 1')
else:
    print('x = 1')
print('finish')

运行结果:

五、def 函数

1.函数调用与传参

一般按照函数写的顺序传递参数,如果不按顺序则可以写上参数名。

# 测试函数
def test(a, b=0, c=1):  # b,c都设置了默认参数,可以缺少。
    print('a=', a, ',b=', b, ',c=', c)
# 调用函数
test(1)
test(1, 2, 3)
test(1, c=3, b=2)  # 指明参数名后,顺序可以变
test(0, c=2)  # a没有默认参数,必须传参

运行结果:

注意:默认参数只能从右往左连续给出,即所有的默认参数都不能出现在非默认参数的前面;没有默认值的参数必须传递,否则报错。

2.函数的可变参数传参

函数的可变参数是传入的参数可以变化的,1个,2个到任意个。注意可变参数在函数定义不能出现在特定参数默认参数前面,因为可变参数会吞噬掉这些参数。

def report(name, *grades):
    total_grade = 0
    for grade in grades:
        total_grade += grade
    print(name, 'total grade is ', total_grade)
report('小明', 60, 70)
report('小明', 60, 70, 80)

运行结果:

小明 total grade is  130
小明 total grade is  210

3.函数的关键字参数

关键字参数可以传入0个或者任意个含参数名的参数,这些参数名在函数定义中并没有出现,这些参数在函数内部自动封装成一个字典(dict).

def portrait(name, **kw):
    print('name is', name)
    for k,v in kw.items():
        print(k, v, end=' ')
    print('\n---------')
portrait('小明', math='90', Chinese=88)
portrait('小明', math='90', Chinese=88, music=77)

运行结果:

name is 小明
math 90 Chinese 88 
---------
name is 小明
math 90 Chinese 88 music 77 
---------

注意:

       通过可变参数和关键字参数,任何函数都可以用 universal_func(*args, **kw) 表达。

六、全局变量

那如何在外部也能调用一个在局部里修改了的全局变量呢. 首先我们在外部定义一个全局变量 a=None, 然后再 fun() 中声明 这个 a 是来自外部的 a. 声明方式就是 global a. 然后对这个外部的 a 修改后, 修改的效果会被施加到外部的 a 上. 所以我们将能看到运行完 fun()a 的值从 None 变成了 20.

APPLE= 100 # 全局变量
a = None
def fun():
    global a    # 使用之前在全局里定义的 a
    a = 20      # 现在的 a 是全局变量了
    return a+100

print(APPLE)    # 100
print('a past:', a)  # None
fun()
print('a now:', a)   # 20

运行结果:

100
a past: None
a now: 20

 


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ystraw_ah

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

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

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

打赏作者

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

抵扣说明:

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

余额充值