All 39 Python Keywords Explained

Поділитися
Вставка
  • Опубліковано 22 гру 2024

КОМЕНТАРІ • 255

  • @sunsodien
    @sunsodien 8 місяців тому +8

    Thanks!

    • @Indently
      @Indently  8 місяців тому +3

      Thank you :)

  • @cerealport2726
    @cerealport2726 8 місяців тому +158

    I think you're much too harsh on bob at 9:45.
    bob has helped in so much of my coding. Always been there at the frontlines, takes any assignment I hand out, and successfully completes tasks, or faithfully reports errors encountered.
    Justice for bob!

    • @EpicNoobx
      @EpicNoobx 8 місяців тому +6

      So true

    • @drforest
      @drforest 8 місяців тому +8

      bob is _

    • @TidalMaker
      @TidalMaker 7 місяців тому +7

      Bob helped me with my flat tire. I was on my way to a coding interview. I wouldn't have gotten the job without him.

    • @Farfromfuture
      @Farfromfuture 6 місяців тому

      I use Alex Smith in everything

    • @hunterhr26
      @hunterhr26 6 місяців тому

      Yeah, he just cured my ovarian cancer

  • @WinfriedKastner
    @WinfriedKastner 8 місяців тому +35

    Python in 34 minutes. Incredible!! And perfectly explained as always 👍

    • @miquelr2353
      @miquelr2353 8 місяців тому

      I got lost at the asyncio part. The 7th keyword lol

  • @cyberhard
    @cyberhard 8 місяців тому +30

    Excellent video. Thanks for sharing your knowledge!

  • @verysb
    @verysb 7 місяців тому +28

    Some complement:
    A and B -> (B if A else A)
    A or B -> (A if A else B)
    bool(0) -> False
    bool(“”)-> False
    bool([])-> False
    bool(None)-> False
    bool(“ “)-> True
    code after else that after while, for, try except
    will only be executed when the loop or the try is finish normally (not normal: break, error)

  • @cuicuidev
    @cuicuidev 8 місяців тому +6

    You can also use the from keyword to yield from an iterator: yield from iterator

    • @marckiezeender
      @marckiezeender 8 місяців тому

      And you can use "from" to raise an exception from a context. I.e., raise Exception() from None

  • @AJMansfield1
    @AJMansfield1 8 місяців тому +27

    4:07 you also use "as" with "except" to assign the exception to a variable

    • @tgsvampire
      @tgsvampire 7 місяців тому +2

      Is this kind of use of 'as' keyword relevant in the industry ?

    • @AJMansfield1
      @AJMansfield1 7 місяців тому +5

      @@tgsvampire except/as is perhaps even more common in real code than with/as

    • @godowskygodowsky1155
      @godowskygodowsky1155 6 місяців тому +2

      ​@tgsvampire When you're working with large systems, logging errors is a must. You need the "as" keyword to pass exceptions to a logger.

    • @tongpoo8985
      @tongpoo8985 4 місяці тому

      ​@@tgsvampireyes, used all the time.

  • @Keventor
    @Keventor 6 місяців тому +1

    33:12
    type type = int | float
    match: type = 10
    case: type = 10.0
    match match:
    case case:
    print(f"types {type} are the same because case {case} matches {match}")

  • @Celemimphar
    @Celemimphar 8 місяців тому +17

    I have never heard of several of these despite taking a few Python courses... I am intrigued

    • @callbettersaul
      @callbettersaul 8 місяців тому +5

      "despite" is the wrong word here.

    • @stephenEs3532
      @stephenEs3532 7 місяців тому +6

      @@callbettersaul its not English class. Hush your mouth

    • @Icthi
      @Icthi 7 місяців тому +15

      Let’s suppose it’s English class for a sec. What do you suppose is wrong with this use of “despite”?

    • @TearsOfTheKingdomIsGreatToo
      @TearsOfTheKingdomIsGreatToo 2 місяці тому

      it is correct ​@@callbettersaul

  • @anthonydrakefordshadow
    @anthonydrakefordshadow 6 місяців тому +4

    Thank you I really am beginning to appreciate material that is more focused on thinking, and Python. I’ve learned a lot from tutorials, but for the most part, I am only able to apply what I have copied and limited situation versus having an understanding and being able to create.

  • @datanasov
    @datanasov 8 місяців тому +3

    At 33:33 you can't do that. Doing "case case:" will match any number (not just 10) and put it in the variable case. I think that's why your editor is underlining it.

    • @Indently
      @Indently  8 місяців тому +3

      Well spotted, and noted! I clearly didn't do enough research on that because it was a "case" I thought I'd never even dare to attempt. I appreciate you pointing it out :)

  • @ImportCode
    @ImportCode 6 місяців тому +8

    I'm I the only one finding this video funny.
    Very comprehensive video.
    I love it.😅

  • @prof.anthoniraj
    @prof.anthoniraj Місяць тому +1

    Great way of explaination about Python Keywords. Keep it up.

  • @simonwillover4175
    @simonwillover4175 8 місяців тому +21

    Built-in constants:
    * `False`
    * `None`
    * `True`
    Built-in functions:
    * `assert`
    * assert is simply a built-in function that doesn't require parenthesis; you could write your own function, `my_assert`, that does the same thing
    * `type`
    * unlike `assert`, you can override `type`
    Imports:
    * `import`
    * `from` - must be followed by `import`
    * `as` - must be proceeded by `import` or `with`
    Declarations:
    * `class`
    * `def`
    * `async` - must be followed by `def`
    * `del`
    * Scope changes:
    * `global`
    * `nonlocal`
    Logical operators:
    * Unary:
    * `not`
    * Binary:
    * `and`
    * `in`
    * `is`
    * `or`
    * Ternary:
    * `if` and `else` - must be used together, like this:
    * `(when_true) if (condition) else (when_false)`
    Expression:
    * `lambda`
    * allows you to make a 1-line function that returns the value on the line without declaring the function
    * very
    Control:
    * `pass`
    * actually does nothing
    * typically used to put an empty body in a control block, function, or class
    * Logic
    * `if`
    * `else`
    * `elif`
    * Loops:
    * `for`
    * `while`
    * `continue`
    * `break`
    * Error handling:
    * `try`
    * `except` - must be proceeded by `try`
    * `finally` - must be proceeded by `try` or `except`
    * `raise`
    * Functions:
    * `return`
    * `yield`
    * makes the function return a generator, even if the code around `yield` is not accessible
    * this items in this generator are all of the values of each `yield` statement
    * if the function hits a `return` statement, the generator will stop / finish and ignore the rest of the function; further attempts to generate items from the generator will fail because it is finished and the GC might have deleted the function call stack that the generator used
    * Async:
    * `await`
    Switch statenements:
    * `case`
    * `match`
    Bad
    * `with`
    * `with A as B: C` does this:
    * run `A`
    * set `B =` return value of `A`
    * run `B.__enter__()`
    * try to run `C`
    * if an exception occurs, run `B.__exit__(self, exception_type, exception_val, trace)`
    Doesn't do anything and is not a constant
    * `_`
    * essentially not a keyword

    • @tgsvampire
      @tgsvampire 7 місяців тому

      Hey ? Are you a pro ?

    • @tgsvampire
      @tgsvampire 7 місяців тому

      What is this global and local scope ? ls it like, the local scope variable is something that can be directly accessed by only the function in which it is defined ?

    • @tgsvampire
      @tgsvampire 7 місяців тому

      This is one of the most underrated comment I bet...🧠🔥

    • @tgsvampire
      @tgsvampire 7 місяців тому

      What is this lamda ? I have seen this many times but I am confused about this one.

    • @simonwillover4175
      @simonwillover4175 7 місяців тому +1

      @@tgsvampire I am not really a pro. I am an enthusiastic programmer with only a few years of hobby experience. I could get a job as a junior dev if I wanted to though. I read your other comments and it looks like you want to learn python. I suggest you learn more python. My comment only makes sense to people without about a year of programming under their belt.

  • @jefflastofka9289
    @jefflastofka9289 2 місяці тому

    That's a really great review to see which ones I know and which ones I should look into soon or ignore for a while longer. Thank you so much for putting all that together.

  • @PCgmesforever
    @PCgmesforever 6 місяців тому +1

    Why is it that all programming teachers I know are calmest most chill and nice people yet they casually drop the darkest type of humour or life truths :D

  • @rakibmasud3288
    @rakibmasud3288 8 місяців тому +6

    Really appreciate your effort. More videos like this please!!!

  • @alejandroherme9497
    @alejandroherme9497 8 місяців тому +5

    Some useful details:
    ( Better to write this down before I forget something )
    "and"/"or" : because of the short circuit system, these can return any object (non booleans).
    "None": while these represent the absence of a value (like null in other languages), it doesn't mean that every non declared name equals None. It's more of a special value that any object can take. (btw if we use types, by default it's incorrect to assign None). Also we must be careful when writing "assert x" or "if x:" when we want to check for None , because if x is equal to False, it will act as if it is None. This depends on the __bool__ method of the object in question.
    Asserts: I've read that they only work if __debug__ is True, so I'm instead using "if x: raise Exception".
    "del": a non recommended keyword. Its behavior depends on the object involved. If it's a list item, del will remove it from lists.
    "pass": avoid filling placeholders with pass, since you won't be able to differentiate what is supposed to do nothing (for example, an abstract method) and what has its implementation pending. I prefer to "raise NotImplementedError()"

    • @marckiezeender
      @marckiezeender 8 місяців тому +2

      Just to add about 'pass':
      I use pass to denote "this block of code does nothing", I use raise NotImplementedError to denote "this block is missing its implementation", and I use ... to denote "this block of code is abstract" (i.e. for a stub file, Protocol method, or abstract method; note that you can't create instances of abstract classes.)

  • @ЮрийБ-о6е
    @ЮрийБ-о6е 8 місяців тому

    Amazing video, thx. Waiting for combination of them :) Once, I was really confused by `yield from`

  • @avrelyy
    @avrelyy 2 місяці тому

    great explanation of each keyword. Thanks!

  • @chriscarney2260
    @chriscarney2260 8 місяців тому +4

    27:25 great video.
    Point of house keeping.. there are 2 While keywords in the info list. 2nd should be With..
    Still a great video;-)

    • @Indently
      @Indently  8 місяців тому +1

      Thank you! I updated it :)

  • @yidisprei100
    @yidisprei100 8 місяців тому +2

    The 'in' keyword is in the thumbnail twice. Amazing content btw.

    • @Indently
      @Indently  8 місяців тому +4

      Good eye! My friend spotted that a couple days ago while the video was private, and I was wondering how many other people would notice.

  • @denoww9261
    @denoww9261 6 місяців тому

    Great video! Btw, at 33:33, technically `case case` doesn't work as you'd expect - the way case statements work, a single variable name after the keyword is actually assigning a variable to the value of the match statement (in this case, the `match` variable). So here you'd have a shadowed `case` variable inside your case block with whatever value was in the `match` variable.

  • @flaminggasolineinthedarkne4
    @flaminggasolineinthedarkne4 7 місяців тому +1

    Really nice video with the explanations about built in keywords in python. I appriciate your efford.

  • @zayyabhone
    @zayyabhone 2 місяці тому

    this was very informational, thank you for the insight

  • @rainymatch
    @rainymatch 7 місяців тому

    lovely vid, as for if/else, I would have been happy to see also the ternary expression 🙂
    ```
    if else
    ```

  • @caymanm7241
    @caymanm7241 3 місяці тому

    What do the "|"s do when declaring a variable? I'm assuming it's similar to type hints.

  • @leftsidemartian9839
    @leftsidemartian9839 7 місяців тому +1

    can someone explain the variable declaration at 5:31 please 🙏

    • @owtechS
      @owtechS 7 місяців тому +1

      This variable declaration db: str | None = "myd.db" is using type hints, which are annotations used in Python to indicate the expected types of variables. Let me break it down for you:
      db: This is the name of the variable.
      :: This indicates that what follows is the type annotation for the variable.
      str | None: This part indicates that the variable db can hold either a string (str) or None.
      = "myd.db": This part initializes the variable db with the value "myd.db". Here, "myd.db" is a string, which satisfies the first part of the type hint (str).

  • @max_unch
    @max_unch 8 місяців тому +2

    Thank you for all the excelente work! Great video 👌🏼

  • @ashutoshsinha9848
    @ashutoshsinha9848 8 місяців тому

    Can you suggest good resource to learn asynchronous programming with python? or better make a detailed video.

  • @elymX
    @elymX 6 місяців тому +1

    Would be nice if you do the same thing for SQL so we can have 1 stop shop as reference.

  • @velo412velo
    @velo412velo 8 місяців тому

    Amazing job buddy. Thank you very much for all your hard work! You are amazing and I am defo gonna buy one of your paid tutorials.

  • @Lolks
    @Lolks 8 місяців тому +1

    My first encounter of the None keyword, was on my Python Midterm, when we had to figure out the output of code snippets, and one of the questions was print(print("Hello, World!")

  • @Technology_AmaAkar
    @Technology_AmaAkar 24 дні тому

    Thank you for sharing

  • @alansnyder8448
    @alansnyder8448 8 місяців тому

    Really good video. I've learned a few things. 'match' with a tuple was completely unknown to me before this video. I've seen '_' used, but now understand it.
    Can someone tell me when the '_' became a feature? If I use it in Python 3.8 will it cause a problem?

  • @lalitprajapati5928
    @lalitprajapati5928 День тому

    Which Code editor you are using

  • @yvg2009
    @yvg2009 2 місяці тому

    Can I create my own keyword like True? E.g. Pi = 3.14159? Directly in C files?

  • @xandii4694
    @xandii4694 8 місяців тому

    should have mentioned using only 'throw' in an 'except' block to rethrow and maybe how to use underscore for "private" methods. Apart from that great video 👍

  • @lucasmandato4910
    @lucasmandato4910 5 місяців тому

    dude this is amazing thank you so much

  • @I3ased
    @I3ased 6 місяців тому

    9:15 im so confused to why he has none in all these are they doing something?

    • @olivergrim7634
      @olivergrim7634 6 місяців тому

      None there means what they return
      by default they return None (__init__ ALWAYS returns None)
      ex.: def myfunc() -> int:
      this *hints* that the function returns an integer
      returning works with the return keyword and replace the call of function in code with that the function returns
      returning is when we want information from the function

    • @I3ased
      @I3ased 6 місяців тому

      @@olivergrim7634 thank you for replying i understand now 🙏🙏

  • @Radical9535
    @Radical9535 3 місяці тому

    Really good Video!

  • @JMCiller
    @JMCiller 8 місяців тому

    What are the differences between try/except(raising an exception) and assert?

    • @marckiezeender
      @marckiezeender 8 місяців тому +2

      assert only works in debug mode, for one. It's basically shorthand for:
      if __debug__ and :
      raise AssertionError()

    • @falkez1514
      @falkez1514 8 місяців тому

      also, assert is specifically a bool check, try is made to be ready for any type of circumstance!

  • @Jan_Be
    @Jan_Be 8 місяців тому

    Could you upload the examples as python files?
    Thank you!

  • @DrDeuteron
    @DrDeuteron 8 місяців тому +5

    Now this is a separate video on coroutines. yield is not just a 'return' statement. It is also an assignment statement.
    If in a generator called 'foo', you have:
    new_value = yield old_value
    a user, baz, of that generator that has declared:
    def baz..
    bar = foo()
    can then do:
    current_result = bar.send(my_value)
    which gets bars's old_value and stores it locally in baz's current_result while at the same time storing baz's my_value in bar's new_value. bar then waits there until anyone calls next(bar). at which point foo's code restarts execution.
    confused? good, so am I. But I have used these to write a text "continued line" unwrapper, and a clever spacecraft data packet reader in which the length of the packet is not known until the end of sensor scan--with NO, ZERO, NADA if-then clauses. Cyclic Complexity = 1, but it handles all cases WITHOUT indexing past/present data streams, even though the data reading depends on the values of the data stream at different timestamps (read: indices).

  • @sovereignlivingsoul
    @sovereignlivingsoul 8 місяців тому

    very classy Class explanation, lol, fast forward ahead, when you read the text from the file, can you go to a specific line and input data,

  • @replikvltyoutube3727
    @replikvltyoutube3727 8 місяців тому

    Is it possible to overwrite these keywords, like translate them for instance (even if it is bad practice)?

    • @Indently
      @Indently  8 місяців тому +1

      With soft keywords you can assign new values to them, but with the built-in ones you would have to change the implementation of Python itself from what I understand.
      I once created a script that translated my own keywords into Python code, but it was silly and just for fun.

  • @markandrews1219
    @markandrews1219 8 місяців тому +1

    What is the IDE in this demonstration?

  • @joshix833
    @joshix833 8 місяців тому +1

    What about the other uses of else? Like for ... else, while ... else, try ... except ... else?

    • @effanineffables
      @effanineffables 8 місяців тому +1

      was looking for this comment before I said the same thing! else is so much more than just if..else

  • @mixme8655
    @mixme8655 3 місяці тому

    Thank you sir❤

  • @shailumishra-y3n
    @shailumishra-y3n 4 місяці тому

    How many keywords in python latest version 3.12.0 35 or 39 please Riply any one🙏

  • @CLOCK-WORK
    @CLOCK-WORK 8 місяців тому

    Hiw do you get and install the python you have?

  • @callbettersaul
    @callbettersaul 8 місяців тому

    Something happened with 3rd chapter name ("None02:34 True")

    • @Indently
      @Indently  8 місяців тому

      Thank you for pointing that out, I fixed it!

  • @Snollygoster-
    @Snollygoster- 8 місяців тому

    I actually saw the nonlocal in a script at work, it functioned how I thought, but seeing it then just made me wonder why it's even there. It looked like they were just trying to add more lines of code.

  • @Johann75
    @Johann75 3 місяці тому

    Cool lesson

  • @marykatherine4080
    @marykatherine4080 6 місяців тому

    Is this done in visual code studio plz reply

    • @olivergrim7634
      @olivergrim7634 6 місяців тому

      idk what that is, it looks like pycharm, both vs code and pycharm are good, pycharm is python specific

    • @moho472
      @moho472 3 місяці тому

      ​@@olivergrim7634Visual Studio Code is another IDE, made by Microsoft.

    • @frozendude707
      @frozendude707 2 місяці тому

      yup, PyCharm on Mac

  • @abdomash_
    @abdomash_ 8 місяців тому +1

    32:36 Wow, TypeScri-... I mean Python is a really nice language!

  • @watchmakerful
    @watchmakerful 7 місяців тому

    Wow, finally a language where a switch construction does not require "break" after each case!

    • @axiezimmah
      @axiezimmah 4 місяці тому

      That's a downside imo.
      Fallthrough isn't possible in python even if you wanted it to. Which limits the use cases.

  • @EchoesAndInnovations
    @EchoesAndInnovations 7 місяців тому

    Awesome work.

  • @joshix833
    @joshix833 8 місяців тому

    What about "async for" and "async with"?

  • @НиколайКузьмин-с4р
    @НиколайКузьмин-с4р 8 місяців тому

    Seems like keyword number 34 at 27:21 should be with and not while

    • @Indently
      @Indently  8 місяців тому

      Thank you, it has been fixed!

  • @locust76
    @locust76 8 місяців тому +1

    I don't think I will ever be able to understand how lambda works. I use it in several of my projects to sort lists of dictionaries by keys, but how or why it works is anybody's guess.

    • @owtechS
      @owtechS 7 місяців тому

      Am with you on this one. But it is somehow important

    • @moho472
      @moho472 3 місяці тому

      Lambdas are useful if you just want to do something like a deepcopy, or modifying data, without having to define a function.
      They're single use, and make your code cleaner.

  • @MadMan-369
    @MadMan-369 7 місяців тому

    Thanks ❤❤❤❤

  • @anon_y_mousse
    @anon_y_mousse 8 місяців тому

    Apparently Python 3.9 doesn't have a soft keyword list, so I think I need to update. What's really weird is that my keyword list has __peg_parser__ in it and I have no clue what that does.

  • @JohnBerry-q1h
    @JohnBerry-q1h 6 місяців тому

    Which software developers’ implementation of PYTHON are the most reliable and least “buggy” ?

  • @chrisder1814
    @chrisder1814 3 місяці тому

    hello could I write to you so that you can tell me what I think of the ideas I had

  • @lhuguenin100
    @lhuguenin100 8 місяців тому +5

    Can we please just agree that it’s insane for true and false to be capitalized???

    • @ゾカリクゾ
      @ゾカリクゾ 8 місяців тому +1

      It's a bit weird yes, but at least True and False somewhat indicate that they are objects, not simple 1's and 0's like in other languages.

    • @alansnyder8448
      @alansnyder8448 8 місяців тому +5

      I'm actually okay with it capitalized, along with None. It makes it stand out in code.

    • @matthewsharp1178
      @matthewsharp1178 8 місяців тому +1

      I’m fine with it

    • @lhuguenin100
      @lhuguenin100 8 місяців тому +1

      I really thought I would get more support with this one hahah
      @@ゾカリクゾ that’s because in most languages they aren’t actually objects, they are just masks or macros for 1 and 0, which is more memory efficient. But in python everything is an object, there are no true types, which can be good for other reasons.

  • @Heavy_Lvy
    @Heavy_Lvy 8 місяців тому

    got to be my favorite keyword 10:27

  • @АлексМихайлов-ч6э
    @АлексМихайлов-ч6э 6 місяців тому

    Finaly some insight

  • @kbcat
    @kbcat 6 місяців тому

    why do you declare types

  • @travisti9574
    @travisti9574 2 місяці тому

    3:50

  • @llnobbi7ll
    @llnobbi7ll 7 місяців тому

    Great vid

  • @sayanta01
    @sayanta01 7 місяців тому

    thanks you so much

  • @Slipping_thru_the_Seams
    @Slipping_thru_the_Seams 7 місяців тому

    thank you!

  • @MrSunTrope
    @MrSunTrope 3 місяці тому

    Notimpemented?

  • @legionarius-z7x
    @legionarius-z7x 6 місяців тому

    Nice video

  • @jacobmmcdonald
    @jacobmmcdonald 8 місяців тому

    Assert should only be used for debugging. If the optimization flag is used and _ _debug_ _ is set to false, assert statements are not evaluated.

  • @anandraj2895
    @anandraj2895 8 місяців тому

    informative thanks

  • @falkez1514
    @falkez1514 8 місяців тому +6

    poor bob got so abused today, he even wrote a letter to indently through the .txt but no one cares...

  • @itexpert4193
    @itexpert4193 7 місяців тому

    good one

  • @FroggyThicc
    @FroggyThicc 4 місяці тому

    0:00

  • @TheNameIsAQUILA
    @TheNameIsAQUILA Місяць тому +2

    Justice for bob

  • @thanhdanhthai4484
    @thanhdanhthai4484 4 дні тому

    "and start learning"
    I'll app it to your resume

  • @dougiefresh2393
    @dougiefresh2393 7 місяців тому

    Nicley done

  • @Macro-Mark
    @Macro-Mark 5 місяців тому

    Great video. But why give Bob such a hard time 😂

  • @mikeogadono4196
    @mikeogadono4196 5 місяців тому +1

    I started learning coding today .guys I need your support

  • @xjustinjx
    @xjustinjx 8 місяців тому

    wonder what this sounds like in a few years, at 2x.
    35, never programmed, 30k? 40k? hours on the computer playing games. completing my first college programming class right now, currently have 100% going into finals.
    programming is fun.

  • @vryyx_6969
    @vryyx_6969 Місяць тому

    9:25 facts

  • @mr_hat5506
    @mr_hat5506 6 місяців тому +1

    JUSTICE FOR BOB!

  • @lmg88.80
    @lmg88.80 4 місяці тому

    Thanks for the list. It is a clear explaination but you speak fast, maybe because you took a long time to film and by that time its understandable that you want to finish the video by speaking fast.

  • @thefanboy3285
    @thefanboy3285 8 місяців тому

    The first example is me:
    has_money: bool = False

  • @TheManPrtagnst
    @TheManPrtagnst 2 місяці тому

    If anyone sees this im trying to make python have a conversion and can say different things depending on what you say. I would like some help

  • @user-lg4le8xr4s
    @user-lg4le8xr4s 8 місяців тому +1

    We do not say hello to Bob.

  • @murphygreen8484
    @murphygreen8484 8 місяців тому +1

    👍

  • @Kabukkafa
    @Kabukkafa 2 місяці тому +1

    Two "in"s in the thumbnail

  • @faelynOlayu
    @faelynOlayu 2 місяці тому

    9:24 lol real

  • @deepdark242
    @deepdark242 7 місяців тому

    All what person can do is work, because life is misarable ;d 9:25

  • @peaklegacy146
    @peaklegacy146 6 місяців тому

    Poor Bob 😔😔

  • @samsonabraha9536
    @samsonabraha9536 7 місяців тому

    Phyton Keywords was 33, Now how became 39 ???????

  • @dan5e3s6ares
    @dan5e3s6ares 8 місяців тому

  • @mishafurru
    @mishafurru 6 місяців тому

    Poor Bob😢