学习内容1

1.基本函数的构成:定义、实现和调用函数参数,函数返回值。 (第八章)

定义

def 函数名():
	“““注释”””
#输出
	print()
#调用函数
函数名()

调用函数信息

#username是一个形参
def greet_user(username):
    """显示简单的问候语"""
    print("Hello, " + username.title() + "!")
#‘jane’就是一个实参
greet_user('jane')

结果

Hello, Jane!

传递实参

#位置实参
def make_shirt(size_number, word_sample):
    """T恤尺码和字样"""
    print("The T-shirt's size is " + size_number + " and the word sample is " + word_sample + "!" )
make_shirt('XL', 'TIMES NEW ROMAN')

#关键字实参
def make_shirt(size_number, word_sample):
    """T恤尺码和字样"""
    print("The T-shirt's size is " + size_number + " and the word sample is " + word_sample + "!" )
make_shirt(size_number='XL',word_sample='TIMES NEW ROMAN')
make_shirt(word_sample='TIMES NEW ROMAN',size_number='XL')

#默认值
def make_shirt(size_number, word_sample='TIMES NEW ROMAN'):
    """T恤尺码和字样"""
    print("The T-shirt's size is " + size_number + " and the word sample is " + word_sample + "!" )
make_shirt('XL')

结果

The T-shirt's size is XL and the word sample is TIMES NEW ROMAN!

The T-shirt's size is XL and the word sample is TIMES NEW ROMAN!
The T-shirt's size is XL and the word sample is TIMES NEW ROMAN!

The T-shirt's size is XL and the word sample is TIMES NEW ROMAN!

函数返回的值叫做返回值,可使用return语句将值返回到调用函数的代码行。
返回简单值

def name(first_name, last_name):
    """返回完整的姓名"""
    full_name = first_name + " " + last_name
    return full_name.title()
musician = name('jimi','hendrix')
print(musician)

结果

Jimi Hendrix

2.函数内部变量的作用域,可以通过locals()和globals()两个函数来了解。

1.变量起作用的代码范围被称为变量的作用域,不同作用域内的变量互不影响。在函数内部定义的变量为局部变量,在函数外部定义的变量为全局变量。

2.局部变量只在定义它的函数体内有效,在函数外即使使用同名的变量,也会被认为是另一个变量。

3 全局变量在定义后的代码中都有效,包括它后面定义的函数体内,即若函数体内和函数体外的变量同名同值,该变量为隐式的全局变量。如果全局变量与局部变量同名不同值,则在定义局部变量的函数中,只有局部变量有效,即局部变量覆盖掉同名的全局变量。

4.若一个变量已经在函数外定义,在函数内需要修改这个变量的值,可以在函数内通过global关键字来声明这个变量为全局变量。若一个变量并未在函数外定义,在函数内直接使用global关键字将一个变量声明为全局变量,在调用这个函数后,将自动增加新的全局变量。

5.当函数运行结束后,在函数内部定义的局部变量会被自动删除而不可访问,而在函数内部定义的全局变量仍然可以访问。

6.一般而言局部变量的引用比全局变量速度快,应该优先考虑。除非真的必要,应该避免使用全局变量,因为全局变量会增加不同函数之间的隐式耦合度,降低代码可读性,使得代码测试和纠正变得困难。

locals()和globals()这两个函数主要提供,基于字典的访问局部变量和全局变量的方式。

a = 0#函数外部定义变量a
def sum(arg1, arg2):
    a = arg1 + arg2#函数内部定义变量a
    print("函数内是局部变量: ", a)
    return a
sum(2,5)#函数内部a的值
print("函数外是全局变量: ", a)#函数外部a的值

结果

函数内是局部变量:  7
函数外是全局变量:  0

3.匿名函数:lambda,了解map函数,并用lambda完成列表(注:列表中各个元素全为数字类型)中每一个元素+1的操作。

lambda的语法:lambda [arg1 [,arg2,…argn]]:expression
例如:lambda x, y: x + y

map函数语法:map(function, iterable, …)

function -- 函数
iterable -- 一个或多个序列
s = list(map(lambda x: x+1,[1,2,3]))
print(s)

结果

[2, 3, 4]

4.了解文件操作,如何写入,读取,追加,并了解读取文件中每一行的几种方式。(第十章)

#读取,将文件保存在程序所在目录中并打开
with open('pi.txt') as file_object:
    contents = file_object.read()
    print(contents)

结果

3.1415926535
   8979323846
   2643383279
#逐行读取
with open('pi.txt') as file_object:
    for line in file_object:
        print(line)

结果

3.1415926535

   8979323846

   2643383279
#写入文件
filename = 'programming.txt'#不存在将会自动创建,存在将清空文件内容
with open(filename,'w') as file_object:
    file_object.write("I love programming.")

filename = 'programming.txt'
with open(filename,'w') as file_object:
    file_object.write("I love playing.")

结果
programming.txt

I love programming.

I love playing.
#附加
filename = 'programming.txt'
with open(filename,'a')as file_object:
    file_object.write("I love python!\t")

结果
programming.txt

I love playing.
I love python!

学习内容2

1.创建和使用类(第九章),为什么说python中一切皆对象?,object类代表了什么?

class Dog():
    """一次模拟小狗的简单尝试"""
    def __init__(self,name,age):
        """初始化属性name和age"""
        self.name = name
        self.age = age
    def sit(self):
        """模拟小狗被命令时蹲下"""
        print(self.name.title() + "is now sitting. ")
    def roll_over(self):
        """模拟小狗被命令时打滚"""
        print(self.name.title() + "rolled over!" )
my_dog = Dog('rock', 6)
print("My dog's name is " + my_dog.name.title() + ".")
print("My dog is " + str(my_dog.age) + " years old.")

结果

My dog's name is Rock.
My dog is 6years old.
Rock is now sitting. 
Rock rolled over!

2.使用类和实例(第九章),self关键字有什么作用?

self:每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。

class Car():
    """一次模拟汽车的简单尝试"""
    def __init__(self,make,model,year):
        """初始化描述汽车的属性"""
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 0#增加一个里程数
    def get_name(self):
        """返回汽车的信息"""
        long_name = str(self.year) + ' ' +self.make + ' ' +self.model
        return long_name.title()
    def read_odometer(self):
        """打印里程数"""
        print("This car has " + str(self.odometer_reading) + " miles on it.")
my_new_car = Car('BMW', 'X6', 2016)
print(my_new_car.get_name())
my_new_car.odometer_reading = 20#将0 修改成20
my_new_car.read_odometer()

结果

2016 Bmw X6
This car has 20 miles on it.

3.继承(第九章)(附加:类中三大特性,封装,继承和多态,c++和java都有多态,python明面上是没有多态的,但是也可以实现,如果有能力,可以探究下如何实现)

接着上面一部分

class Car():
    """一次模拟汽车的简单尝试"""
    def __init__(self,make,model,year):
        """初始化描述汽车的属性"""
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 0#增加一个里程数
    def get_name(self):
        """返回汽车的信息"""
        long_name = str(self.year) + ' ' +self.make + ' ' +self.model
        return long_name.title()
    def read_odometer(self):
        """打印里程数"""
        print("This car has " + str(self.odometer_reading) + " miles on it.")
my_new_car = Car('BMW', 'X6', 2016)
print(my_new_car.get_name())
my_new_car.odometer_reading = 20#将0 修改成20
my_new_car.read_odometer()

class ElectricCar(Car):
    """电动车的独特之处"""
    def __init__(self,make,model,year):
        """初始化父类的属性"""
        super().__init__(make,model,year)
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_name())

结果

2016 Bmw X6
This car has 20 miles on it.
2016 Tesla Model S

4.import类到其他文件使用的几种方法,并在类中实现一个函数打印__file__关键字,看下__file__前后的变化,并解释原因(第九章)

(1)导入单个类
from 被导入类文件名 import 被导入类名
例如:from car import Car 从文件car.py中导入Car类
(2)导入多个类
from 被导入类文件名 import 被导入类名1,类名2等
例如:from car import Car,ElectricCar
(3)导入整个模块
import 被导入文件名
例如:import car
(4)导入模块内所有类
from car import
例如:from car import