📺 Develpreneur YouTube Episode

Video + transcript

Python Certification Training - Modules and Packages

2021-08-31 •Youtube

Detailed Notes

This episode looks into modules and packages in Python as we continue moving through topics on the certification syllabus

Useful Links: https://docs.python.org/3/tutorial/modules.html

Learn more about the overall certification and syllabus here: https://pythoninstitute.org/certification/pcap-certification-associate/pcap-exam-syllabus/

Github repository for code examples: https://github.com/robbroadhead/PythonCertificationSeries

Transcript Text
[Music]
well hello and welcome back we are
continuing looking at various things to
help us through our python certification
this time we're going to look at modules
we have touched on these along the way
but now let's take a closer look into
these things now modules in the past
we've seen a few examples where we do an
import and then we give it a name
that would be
a module
now for this example we've got a couple
of files today that we're working with
so i have a module
which is i'm calling my mod
and all it's got is a variable my name
and it's got a function called add we've
seen this ad before
now what happens
when we bring in a module
so if i do and the module name is based
on the file name uh other than the dot
py so i can do an import
and this one's actually going to be
until enough tells you enough it sees it
right there import my mod
and so now
i can do print
my mod
dot my name
or
[Music]
i can do
my mod.add
and i'm gonna do two comma three
uh i think that's
got to be a string
and so now if i can find this
let's clear that crap out
and if i do what i call it module
there we go
and so i can see that
it's going to print out here it prints
the name
and it prints a function so now i've
added those in i can use these in
multiple places
so i could take actually some of these
examples i have here where i have these
nice little functions and helpers
and
all of this becomes available if i just
do a full
import
now let's look at because i've imported
it i do want to show you that
my dot
name
and we can see here
so you can get a name out of a module in
case you wanted to know this isn't
essentially again for some of the other
things we've done that are more
uh dynamic
but you can grab the module name and you
can see here that's what it is so it's
typically going to be i mean it's going
to be exactly this
and it's because this name
function was actually imported when i
did this import my mod
now separately
let's push these
down because what i'm going to do
another thing i can do
is
i can name what i want to pull in so let
me
go back to my mod
and i'm going to do add
and
let's do
multiply
so not much difference there
now let's see if i come here and i do
import my mod
i'm going to be able to see
again that i can do my mod dot multiply
2 comma three
and
it prints out six all is well in the
world
i can also do
i can do an import
uh my mod let's see i want to do
i'm sorry
so now i'm going to change a little bit
and i'm going to do from
my mod
import
uh
what was it called add
and if i do that multiply is not going
to work anymore
and
note
that all of these have gotten bad
according to this and we're going to see
that look
my mod is not defined
so if i do for my mod import add
then
um
i can do
let's move this guy up here
now i'm importing that function i'm not
actually importing the module
and so i'm also going to see here
mymod.name is no no longer going to be
available
but here i can directly do add
and we see that that ad works
because i've simply added this function
brought this function in i've imported
it and so with this name it is basically
just a part of this a part of this class
now this gives us an example there's a
good little thing we can look at is
let's do print
dir
oh my mod
so first
let's just do the import my mod because
we can actually see some information
about this as we've seen when we did our
class stuff
so now when i do my mod
i can see this is all what has come in
built-ins cached
doc file loader name which we've seen
package expect and then add multiply my
name so those are those functions in
that variable that are brought in as
part of it
now if i
do this
let's see so if i just do add now my mod
is no longer
available
and this is not quite it's not going to
allow me to do that
i don't think
yeah oh here we go
and so
here if i just do a
der this is for this script
because it's just a straight script when
i do that import ad and do a directory
notice
that add is there
so i can also do add comma
multiply
and now i can get this in
[Music]
and now we're going to see that i have
add and multiply those are now part of
this script and i can see where multiply
works
so i can actually pull in just specific
things and also note
that the my name is not available
i have not imported it so i don't it's
not available anywhere
now if i do both
then everything is going to work fine
but
we would just have to it really wouldn't
i guess it could be moderately confusing
because you have to actually have ad but
you also have mymod.ad
but this still works because it says all
right i'm just going to add it all in
and you can still see where
and multiply my mod are all in they
don't show up twice
even though they exist twice
or they were imported twice essentially
and note that i have exam i have the
availability to get to those uh one is
this add multiply i get to it through
this script or i get through it to it
through the import so if i bring an
import in
then
i can i reference it that way now i can
also change that so i could do import my
mod as m
and then
that means i'm going to come in here
and do this
and now it's all going to work but now
it's referred to as m we can see here
everything worked the name
is still
going to be the correct name so it's
going to show me what the actual name is
even though
i have essentially aliased it out
as a different name here
now i could also do instead of this line
where i do add and multiply
i can do from
my mod
import
star
and let's just get rid of this one here
and let's see what it gets when i do the
let's get rid of this guy
and let's see what it adds to this local
script when i do the
dir of it and we can see here
because i added star it brought my name
in as well
so i can either bring functions or
variables
so this import star
is the same as if i did
add multiply and my name
and note that it realizes that it
doesn't need that there we go
and so i've got all of those
now note here because i did my import as
m
i didn't point to this earlier m is now
available so these are things that i can
do stuff with whether it's a function or
a variable
so since i've brought a module in under
specific name then that's how it
how the script essentially sees it
and so i can also do
i can do
let's change this around a little bit
uh so let's just comment that out for
now now i can also do
uh import add as
uh let's say a
multiply as
mu
actually let's do ad
and my name
as
mn
and now i could change it to a d so i
can change also not only my
module names
but i can also change
my uh functions
and so
that's uh
all right let's see i'll just do that
i'll do that twice
so now instead of that it's going to be
mn
so i can do that and now i can see up
here
here's my short names
you see that that called my name in both
those cases
now an interesting thing that we could
do is i could say i'm going to take m
i'm going to do this
and this shows me in
pycharm what i just did because i did
multiply as m
then i'm going to have some stuff break
because m
was imported as a module and now i've
overwritten it
and so let's see what happens
boom right here
oh that was mu so let's just do m
and so now
when i come down here when i do the m
dot my name
it doesn't exist anymore because the m
that i imported
is uh
oh i don't i didn't get that far into it
to be able to print the name
but
i was uh so i could do this let me move
this up a little bit
and so here
i can see uh let me put up
something right there just to show
uh let's see
what is
m
so here what is m is multiply so m is
this guy
but if i call him mu
then
when i do what is it what is m now it's
my mod
so you have to watch out it's not
necessarily going to let you know when
you overwrite stuff and it's note it's
top to bottom so whatever you set last
is the one it's gonna take
so you can get into um you know some
issues with that
now one other thing with uh with modules
that we need to be aware of is the idea
of
packages and so now what i did is i've
got a package called samples which is
just a folder
that has this init py
and then it's got this my mod now
this my mod has add two this is
different from
uh let me do it like this
this is different from let's do this
this way as well from the one that we
used
so
which is where you could run into stuff
so now i can do
import
samples dot my mod
as m
and it's going to blow up in a bunch of
places because now it actually has
um wait
yeah so m dot my name doesn't exist
but
my name too does
so let me do my name too first
nice maple open a couple places boom
boom boom uh no it made it so my mod too
but then when it tried to call my name
because it's not my mod it's samples not
my mind so i could do
samples.mymod as sm
and then i could do my mods
my mind as
whoops
as m
and now
i'm specifying which package i'm working
with and boom everything works
now this init
is going to be something that you can
throw out for anything within that
package so if i wanted to move uh
my name to
let's say well let's leave that one but
let's say that within here
i'm just going to do my name equals
samples package
and then come in here and do
well actually let's just do this i'm
going to keep it very simple
i'm going to do a samples package
a knit fired
and let's see where that comes up
that's probably easier to see what goes
on
so notice this is right at the beginning
when i do the import it kicks off that
value it kicks off that script
and i can do things um let's see it
would not be
well let's try this let's do it this way
so i'm going to define
uh if i go here and i define
uh
let's just call it me
i don't give it anything and then it's
just gonna do print me
me
uh let's see
oh
that's what it doesn't like
okay so if i do define me
and now come into my script and do a dir
let's see what happens
[Music]
and so we see here
that it's not available that me did not
show up
however let's look at
[Music]
let's try samples not me
and see what it does oh i'm sorry not
samples
sm
dot
and so i can't exit i can't access it
here either we're gonna find out or can
i
boom
not uh yeah samples my mod has no
attribute
because here although i've executed it
uh for any package
i'm gonna see this so let me uh let's go
ahead and duplicate this so my mod two
so it's going to be the same thing but
just to show you i can go let's go back
to net uh well that'll stay the same
because i don't really need to do
anything with him
but if i go to whoops if i go to modules
and now i do my mod 2
ssm2
then let's go look at here
whoops i don't want to do i don't want
to call this because that's just going
to break it well
and now we can see
uh let's see
it's
fired and so it's only fired once we
don't see it fired a second time
it's the first time i hit anything in
this package it's gonna do
stuff
what is this stuff i don't know it could
vary there's probably some reasons to
have packages where you may want to
uh maybe log that this is being used or
something like that
or there may be some additional setup
i don't know maybe some resources you
want to bring in things like that
it may bring in some additional
imports so you could have these packages
all need certain things available
that it would need to bring that in so i
could do
uh
now i'm gonna get too complicated at
that because then we'll start getting
pretty long into this but
it's really the important thing
is to understand the different ways that
you can bring in modules
packages uh the only way in
this init underscore underscore and knit
underscore underscore
that has to be in a folder for it to be
a package
if i delete this file
let's just take that and
i'm just going to rename it to
not in it
uh yes do the refactor and so now when i
do that
this thing's going to totally blow up
because samples
oh no i did take it
okay i did allow for that
used to be you could you were not
supposed to have that let me see if i
delete it let's just make
sure uh do refactor there we go
[Music]
okay so we are good it used to be that
you had to have that init that was how
you noted that it was a package but
apparently now it's gotten a point where
you just need a folder
and you can refer to that folder as
needed you can use the init
as a way to as i said to do some
additional
work once you're getting into that
package
i think that's good enough for now
we will wrap this one up
and as always the uh the code will be
out in the repository you can see links
in the show notes take a look at those
we are we're getting there we're i don't
know about 75 80 of the way through this
at this point
and uh a couple things left that are
sort of
uh common things like we're gonna deal
some file i o and stuff like that so
we're getting there
just stick with it and before you know
it we will be to a point where we can go
jump out there and take a shot at
getting a python certification
as always go out there have yourself a
great day a great week and we will talk
to you
next time
you
Transcript Segments
0.46

[Music]

26.16

well hello and welcome back we are

28.8

continuing looking at various things to

31.119

help us through our python certification

33.76

this time we're going to look at modules

37.28

we have touched on these along the way

40.32

but now let's take a closer look into

42.719

these things now modules in the past

45.12

we've seen a few examples where we do an

47.2

import and then we give it a name

49.44

that would be

50.64

a module

52

now for this example we've got a couple

54.079

of files today that we're working with

56.32

so i have a module

58.559

which is i'm calling my mod

61.44

and all it's got is a variable my name

64.159

and it's got a function called add we've

66.32

seen this ad before

68.32

now what happens

70.96

when we bring in a module

74.24

so if i do and the module name is based

76.799

on the file name uh other than the dot

79.36

py so i can do an import

82.24

and this one's actually going to be

83.439

until enough tells you enough it sees it

85.2

right there import my mod

87.2

and so now

89.2

i can do print

91.92

my mod

93.92

dot my name

95.68

or

96.34

[Music]

97.52

i can do

99.6

my mod.add

102.079

and i'm gonna do two comma three

104.56

uh i think that's

106.96

got to be a string

112.64

and so now if i can find this

116.64

let's clear that crap out

119.28

and if i do what i call it module

126.399

there we go

128.879

and so i can see that

130.959

it's going to print out here it prints

132.879

the name

134

and it prints a function so now i've

135.599

added those in i can use these in

137.92

multiple places

139.44

so i could take actually some of these

141.04

examples i have here where i have these

142.64

nice little functions and helpers

145.2

and

146.16

all of this becomes available if i just

148.64

do a full

149.92

import

152.48

now let's look at because i've imported

154.879

it i do want to show you that

158.16

my dot

163.84

name

169.04

and we can see here

170.72

so you can get a name out of a module in

172.64

case you wanted to know this isn't

174.239

essentially again for some of the other

175.599

things we've done that are more

177.44

uh dynamic

178.959

but you can grab the module name and you

181.599

can see here that's what it is so it's

184.72

typically going to be i mean it's going

185.92

to be exactly this

187.76

and it's because this name

189.92

function was actually imported when i

192.239

did this import my mod

194.72

now separately

197.68

let's push these

201.04

down because what i'm going to do

204.799

another thing i can do

207.92

is

209.04

i can name what i want to pull in so let

211.36

me

212.56

go back to my mod

214.319

and i'm going to do add

216.239

and

217.04

let's do

218.72

multiply

222.799

so not much difference there

225.2

now let's see if i come here and i do

228.08

import my mod

229.599

i'm going to be able to see

234

again that i can do my mod dot multiply

238.4

2 comma three

242.48

and

243.36

it prints out six all is well in the

245.12

world

246.48

i can also do

248.56

i can do an import

252.56

uh my mod let's see i want to do

256.32

i'm sorry

257.44

so now i'm going to change a little bit

259.68

and i'm going to do from

261.68

my mod

263.52

import

265.12

uh

265.919

what was it called add

269.759

and if i do that multiply is not going

271.919

to work anymore

274.08

and

275.28

note

276.72

that all of these have gotten bad

279.28

according to this and we're going to see

280.8

that look

282.8

my mod is not defined

285.52

so if i do for my mod import add

288.88

then

291.04

um

292.24

i can do

294.56

let's move this guy up here

297.36

now i'm importing that function i'm not

299.52

actually importing the module

301.68

and so i'm also going to see here

304.479

mymod.name is no no longer going to be

306.479

available

307.6

but here i can directly do add

311.759

and we see that that ad works

314.88

because i've simply added this function

318.16

brought this function in i've imported

320.16

it and so with this name it is basically

322.56

just a part of this a part of this class

326.8

now this gives us an example there's a

328.32

good little thing we can look at is

330.08

let's do print

332.08

dir

334.8

oh my mod

337.199

so first

338.72

let's just do the import my mod because

340.88

we can actually see some information

342.32

about this as we've seen when we did our

344.32

class stuff

346.08

so now when i do my mod

348.72

i can see this is all what has come in

350.8

built-ins cached

352.639

doc file loader name which we've seen

354.96

package expect and then add multiply my

357.12

name so those are those functions in

358.56

that variable that are brought in as

360.72

part of it

363.039

now if i

364.84

do this

366.88

let's see so if i just do add now my mod

369.919

is no longer

371.28

available

375.84

and this is not quite it's not going to

377.199

allow me to do that

380.56

i don't think

382

yeah oh here we go

386.16

and so

387.28

here if i just do a

388.8

der this is for this script

391.759

because it's just a straight script when

393.199

i do that import ad and do a directory

395.6

notice

396.72

that add is there

398.479

so i can also do add comma

401.039

multiply

405.28

and now i can get this in

408.7

[Music]

411.52

and now we're going to see that i have

413.52

add and multiply those are now part of

415.599

this script and i can see where multiply

417.759

works

420.08

so i can actually pull in just specific

422.56

things and also note

424.72

that the my name is not available

427.919

i have not imported it so i don't it's

430.56

not available anywhere

433.199

now if i do both

435.36

then everything is going to work fine

437.84

but

438.96

we would just have to it really wouldn't

441.039

i guess it could be moderately confusing

443.599

because you have to actually have ad but

445.199

you also have mymod.ad

449.12

but this still works because it says all

450.88

right i'm just going to add it all in

452.16

and you can still see where

453.84

and multiply my mod are all in they

456.4

don't show up twice

457.919

even though they exist twice

460.56

or they were imported twice essentially

463.84

and note that i have exam i have the

466.28

availability to get to those uh one is

470.56

this add multiply i get to it through

472.24

this script or i get through it to it

475.52

through the import so if i bring an

477.68

import in

479.52

then

481.36

i can i reference it that way now i can

484.56

also change that so i could do import my

486.4

mod as m

488.96

and then

491.599

that means i'm going to come in here

494.16

and do this

496.4

and now it's all going to work but now

498.56

it's referred to as m we can see here

501.759

everything worked the name

503.68

is still

505.759

going to be the correct name so it's

507.12

going to show me what the actual name is

509.12

even though

510.479

i have essentially aliased it out

512.88

as a different name here

516.8

now i could also do instead of this line

519.2

where i do add and multiply

521.599

i can do from

523.68

my mod

525.12

import

526.399

star

527.519

and let's just get rid of this one here

530.56

and let's see what it gets when i do the

533.76

let's get rid of this guy

537.36

and let's see what it adds to this local

538.959

script when i do the

541.36

dir of it and we can see here

544.32

because i added star it brought my name

546.56

in as well

547.839

so i can either bring functions or

550.32

variables

552.399

so this import star

554.64

is the same as if i did

557.36

add multiply and my name

564.959

and note that it realizes that it

566.959

doesn't need that there we go

570.959

and so i've got all of those

573.2

now note here because i did my import as

576.16

m

577.44

i didn't point to this earlier m is now

580

available so these are things that i can

582.72

do stuff with whether it's a function or

585.36

a variable

586.88

so since i've brought a module in under

588.8

specific name then that's how it

591.839

how the script essentially sees it

596.64

and so i can also do

601.04

i can do

603.36

let's change this around a little bit

605.92

uh so let's just comment that out for

608

now now i can also do

611.44

uh import add as

614.64

uh let's say a

616.959

multiply as

620.16

mu

621.76

actually let's do ad

624.24

and my name

626.079

as

627.519

mn

630.8

and now i could change it to a d so i

633.279

can change also not only my

636.48

module names

638.48

but i can also change

641.2

my uh functions

643.2

and so

644.959

that's uh

645.519

all right let's see i'll just do that

647.2

i'll do that twice

648.88

so now instead of that it's going to be

650.72

mn

652.56

so i can do that and now i can see up

654.8

here

655.76

here's my short names

658.16

you see that that called my name in both

660.24

those cases

661.44

now an interesting thing that we could

662.8

do is i could say i'm going to take m

665.04

i'm going to do this

667.2

and this shows me in

668.959

pycharm what i just did because i did

671.12

multiply as m

673.44

then i'm going to have some stuff break

675.2

because m

676.88

was imported as a module and now i've

678.959

overwritten it

680.24

and so let's see what happens

682.48

boom right here

685.12

oh that was mu so let's just do m

690.959

and so now

692.399

when i come down here when i do the m

694.24

dot my name

695.6

it doesn't exist anymore because the m

697.6

that i imported

700.079

is uh

702.88

oh i don't i didn't get that far into it

704.48

to be able to print the name

706.079

but

708.079

i was uh so i could do this let me move

710.639

this up a little bit

719.68

and so here

720.88

i can see uh let me put up

723.12

something right there just to show

726

uh let's see

728.399

what is

729.76

m

732.959

so here what is m is multiply so m is

736.48

this guy

737.92

but if i call him mu

744.079

then

745.6

when i do what is it what is m now it's

747.92

my mod

749.279

so you have to watch out it's not

750.72

necessarily going to let you know when

752.24

you overwrite stuff and it's note it's

754.959

top to bottom so whatever you set last

758.079

is the one it's gonna take

760.56

so you can get into um you know some

763.12

issues with that

765.44

now one other thing with uh with modules

768.24

that we need to be aware of is the idea

770

of

770.839

packages and so now what i did is i've

773.76

got a package called samples which is

775.519

just a folder

776.88

that has this init py

781.36

and then it's got this my mod now

785.36

this my mod has add two this is

787.68

different from

789.2

uh let me do it like this

791.04

this is different from let's do this

793.36

this way as well from the one that we

795.44

used

796.32

so

797.44

which is where you could run into stuff

798.959

so now i can do

800.48

import

802.72

samples dot my mod

805.519

as m

807.36

and it's going to blow up in a bunch of

809.04

places because now it actually has

812.8

um wait

814.56

yeah so m dot my name doesn't exist

819.76

but

822.72

my name too does

825.12

so let me do my name too first

829.76

nice maple open a couple places boom

831.68

boom boom uh no it made it so my mod too

835.76

but then when it tried to call my name

837.92

because it's not my mod it's samples not

840.32

my mind so i could do

844.44

samples.mymod as sm

848.48

and then i could do my mods

850.959

my mind as

852.48

whoops

853.76

as m

855.68

and now

860.56

i'm specifying which package i'm working

862.32

with and boom everything works

866.079

now this init

868.079

is going to be something that you can

870.079

throw out for anything within that

872.959

package so if i wanted to move uh

876.72

my name to

880.079

let's say well let's leave that one but

882

let's say that within here

885.839

i'm just going to do my name equals

890.959

samples package

896.48

and then come in here and do

899.6

well actually let's just do this i'm

901.199

going to keep it very simple

905.76

i'm going to do a samples package

908.959

a knit fired

913.519

and let's see where that comes up

916.24

that's probably easier to see what goes

917.92

on

920.079

so notice this is right at the beginning

922.16

when i do the import it kicks off that

924.8

value it kicks off that script

927.36

and i can do things um let's see it

930.399

would not be

933.12

well let's try this let's do it this way

935.04

so i'm going to define

937.759

uh if i go here and i define

943.6

uh

944.48

let's just call it me

947.12

i don't give it anything and then it's

948.639

just gonna do print me

954.56

me

957.199

uh let's see

958.639

oh

959.759

that's what it doesn't like

962.48

okay so if i do define me

964.88

and now come into my script and do a dir

969.44

let's see what happens

971.12

[Music]

975.519

and so we see here

978.399

that it's not available that me did not

981.199

show up

982.72

however let's look at

991.73

[Music]

993.04

let's try samples not me

995.199

and see what it does oh i'm sorry not

996.959

samples

999.199

sm

1001.279

dot

1002.32

and so i can't exit i can't access it

1004.16

here either we're gonna find out or can

1006.399

i

1008.24

boom

1009.12

not uh yeah samples my mod has no

1011.92

attribute

1013.199

because here although i've executed it

1016.959

uh for any package

1018.88

i'm gonna see this so let me uh let's go

1021.279

ahead and duplicate this so my mod two

1024.559

so it's going to be the same thing but

1026.4

just to show you i can go let's go back

1028.72

to net uh well that'll stay the same

1030.72

because i don't really need to do

1031.679

anything with him

1033.679

but if i go to whoops if i go to modules

1036.4

and now i do my mod 2

1042.4

ssm2

1047.52

then let's go look at here

1049.6

whoops i don't want to do i don't want

1051.919

to call this because that's just going

1053.6

to break it well

1059.12

and now we can see

1060.799

uh let's see

1062.799

it's

1064.84

fired and so it's only fired once we

1067.36

don't see it fired a second time

1069.76

it's the first time i hit anything in

1071.84

this package it's gonna do

1073.6

stuff

1074.559

what is this stuff i don't know it could

1076.16

vary there's probably some reasons to

1078.24

have packages where you may want to

1081.28

uh maybe log that this is being used or

1084.24

something like that

1085.84

or there may be some additional setup

1088.24

i don't know maybe some resources you

1089.76

want to bring in things like that

1092.08

it may bring in some additional

1094.72

imports so you could have these packages

1098.799

all need certain things available

1101.84

that it would need to bring that in so i

1104

could do

1106.84

uh

1108.72

now i'm gonna get too complicated at

1110.4

that because then we'll start getting

1111.919

pretty long into this but

1114.32

it's really the important thing

1116.16

is to understand the different ways that

1118.16

you can bring in modules

1120.16

packages uh the only way in

1122.32

this init underscore underscore and knit

1124.24

underscore underscore

1126

that has to be in a folder for it to be

1129.039

a package

1130.24

if i delete this file

1132.08

let's just take that and

1135.2

i'm just going to rename it to

1138.72

not in it

1142.799

uh yes do the refactor and so now when i

1145.919

do that

1147.52

this thing's going to totally blow up

1149.12

because samples

1151.679

oh no i did take it

1154.16

okay i did allow for that

1156.96

used to be you could you were not

1158.96

supposed to have that let me see if i

1160.32

delete it let's just make

1162.84

sure uh do refactor there we go

1166.67

[Music]

1168.32

okay so we are good it used to be that

1170

you had to have that init that was how

1171.2

you noted that it was a package but

1173.44

apparently now it's gotten a point where

1174.64

you just need a folder

1176.4

and you can refer to that folder as

1178

needed you can use the init

1180.24

as a way to as i said to do some

1182.24

additional

1183.44

work once you're getting into that

1185.36

package

1186.88

i think that's good enough for now

1188.64

we will wrap this one up

1191.039

and as always the uh the code will be

1194

out in the repository you can see links

1195.76

in the show notes take a look at those

1198.4

we are we're getting there we're i don't

1200.48

know about 75 80 of the way through this

1203.12

at this point

1204.48

and uh a couple things left that are

1206.559

sort of

1207.6

uh common things like we're gonna deal

1209.44

some file i o and stuff like that so

1211.52

we're getting there

1212.88

just stick with it and before you know

1214.64

it we will be to a point where we can go

1216.159

jump out there and take a shot at

1217.84

getting a python certification

1220.4

as always go out there have yourself a

1221.76

great day a great week and we will talk

1224

to you

1225.12

next time

1241.44

you